gpt4 book ai didi

javascript - event.preventDefault 阻止 ajax 调用

转载 作者:行者123 更新时间:2023-11-30 16:05:13 25 4
gpt4 key购买 nike

我一直在尝试让 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 语句。我还尝试通过执行 elem.preventDefault(); 在按钮单击事件上使用 preventDefault;但这不起作用。使用 return false 也不行。

最佳答案

问题似乎与这一行有关:

var data = $(this).serialize();

应该是这样的:

var data = $(elem.form).serialize();

函数中的 this 值将是对 window 对象的引用,而 elembutton 所以 elem.form 将是序列化 的表单(假设这是您想要的数据)

并且如注释中所述,event 仅在某些浏览器中被定义为全局变量,因此您需要在属性中传递 event 并在功能安全。

属性:

onclick="clickFunction(this, event)"

功能:

function clickFunction(elem, event) {
// ...
}

请注意,IE8 及更低版本没有 event.preventDefault(),但您可以设置 event.returnValue = false

关于javascript - event.preventDefault 阻止 ajax 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37142082/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com