我在MVC视图中有一堆链接和一个下拉选择器的jquery点击事件,我在做事件之前就阻止了它们,因为大多数都重定向到一个视图(重定向停止我的jquery代码没有是吗?)在我的点击事件中的所有回调之后,我希望链接和下拉选择器能够执行他们的默认事件,这样它就不会像任何事情一样坐在页面上。
是否有一种简单的方法可以让所有链接/下拉列表返回默认值,然后以编程方式在jquery中单击它们?我已经尝试了$(this).click()
和$(this).submit()
以及e.click()
和e.submit()
而没有运气。
这是我的代码
$("input,a,select").not("#SubmitButton").click(function (e) {
e.preventDefault();
console.log("prevented default");
deletePreview($(this));
});
function deletePreview(button) {
console.log("clicked");
//Delete Offer from DB
$.post('@Url.Content("~/")Offer/DeleteJoAnnOffer/?offerId=' + offerID, function (data) {
console.log("finished deleting");
if (button.attr('id') == "CancelButton") {
window.location.href = '@Url.Content("~/")Offer/CreateJoAnn/';
} else {
//DO DEFAULT ACTION HERE
}
});
};
[编辑]:还有一个问题:如果我不使用preventDefault(),我的jquery事件就会执行(初始部分因为我的控制台记录了“clicked”),但我无法确认jquery帖子是否实际执行因为控制台会在新页面上刷新。
答案 0 :(得分:2)
$("input,a,select").not("#SubmitButton").click(function (e) {
console.log("you do not need to call prevented default :)");
deletePreview($(this));
});
function deletePreview(button) {
console.log("clicked");
//Delete Offer from DB
$.ajax('@Url.Content("~/")Offer/DeleteJoAnnOffer/?offerId=' + offerID,
{
async: false,
success: function (data) {
console.log("finished deleting");
if (button.attr('id') == "CancelButton") {
window.location.href = '@Url.Content("~/")Offer/CreateJoAnn/';
} else {
//DO DEFAULT ACTION HERE
}
}
});
};
这意味着click事件内的代码将一直等到deletePreview中的ajax调用完成。
有关异步参数的说明,请参阅http://api.jquery.com/jQuery.ajax/
答案 1 :(得分:0)
我认为在你的情况下你不需要调用preventDefault,因为你的事件处理程序将首先被执行。 (如果您想在其他地方导航,可以使用它。)