【发布时间】:2016-09-05 15:23:46
【问题描述】:
我一直在尝试让 ajax 调用在由 onclick 事件触发的函数内工作。当我使用 event.preventDefault 页面没有重新加载但 ajax 调用不起作用时,没有数据添加到我的数据库中。当我注释掉该行时,页面会重新加载,但其他一切正常。
function clickFunction(elem) {
var var1 = elem.id;
var var2 = var1.split("_");
// elem.preventDefault();
if (var2[0] == "Add") {
if (var2[1] == "Calls") {
console.log("Calls");
console.log(var1);
event.preventDefault();
var data = $(this).serialize();
$.post('progressSheetDynamic', data).done(function (response){
$(".1").html(parseInt($('.1').html(), 10)+1);
Calls.update(50);
});
}
}
}
HTML代码
<form action="{{ route("progressSheetDynamic") }}" method="post" id= {{ $addID }}>
<input name="increment" value="increment" type="hidden"> </input>
<input type="hidden" name="id" value= {{$activities}} >
<button type="submit" class="styleHover styleButton" onclick="clickFunction(this)" id= {{ 'Add_'.$newText }}> + </button>
</form>
我已经检查了日志并且该函数正在进入 if 语句。我还尝试在按钮单击事件上使用 preventDefault,方法是执行 elem.preventDefault();但这不起作用。也不使用 return false。
【问题讨论】:
-
如果你格式化你的代码会更容易。不要让别人帮助你更难。
-
最快的方法:将
return false;添加到您的onclick。onclick="clickFunction(this); return false;" -
你没有声明事件,这就是它失败的原因。如果您不想提交表单,请不要使用提交按钮。
-
将
onclick="clickFunction(this)"更改为onclick="clickFunction(this, event)"并将event参数添加到您的函数中,例如:function clickFunction(elem, event) {... -
...啊,
var data = $(this).serialize();应该是var data = $(elem.form).serialize();this将是对window对象的引用,而elem是button所以elem.form将成为序列化的形式 (假设这是你想要的).
标签: javascript jquery ajax