我有一个网页,我阻止了对所有提交按钮的默认操作,但是我想在按钮上重新启用默认提交操作我该怎么办?
我目前正在使用以下内容阻止默认操作:
$("form").bind("submit", function(e){
e.preventDefault();
});
我使用以下方法成功完成了此操作:
$(document).ready(function(){
$("form:not('#press')").bind("submit", function(e){
e.preventDefault();
});
但是,如果单击该按钮,我可以动态执行此操作吗?
答案 0 :(得分:114)
您必须解除绑定事件并重新绑定到不会阻止默认的单独事件,或者在取消绑定后稍后在方法中自行调用默认事件。 没有神奇的event.cancelled = false;
根据要求
$('form').submit( function(ev){
ev.preventDefault();
//later you decide you want to submit
$(this).unbind('submit').submit()
});
答案 1 :(得分:13)
要么使用此代码执行redsquare建议的内容:
function preventDefault(e) {
e.preventDefault();
}
$("form").bind("submit", preventDefault);
// later, now switching back
$("form#foo").unbind("submit", preventDefault);
或者,只要允许提交,您就会分配表单属性。像这样:
function preventDefault(e) {
if (event.currentTarget.allowDefault) {
return;
}
e.preventDefault();
}
$("form").bind("submit", preventDefault);
// later, now allowing submissions on the form
$("form#foo").get(0).allowDefault = true;
答案 2 :(得分:4)
function(e){ e.preventDefault();
及其相反的
function(e){ return true; }
喝彩!
答案 3 :(得分:1)
$('form').submit( function(e){
e.preventDefault();
//later you decide you want to submit
$(this).trigger('submit'); or $(this).trigger('anyEvent');
答案 4 :(得分:1)
使用异步操作(定时器,ajax),您可以覆盖属性isDefaultPrevented
,如下所示:
$('a').click(function(evt){
e.preventDefault();
// in async handler (ajax/timer) do these actions:
setTimeout(function(){
// override prevented flag to prevent jquery from discarding event
evt.isDefaultPrevented = function(){ return false; }
// retrigger with the exactly same event data
$(this).trigger(evt);
}, 1000);
}
这是使用完全相同的数据重新触发事件的最完整方式。
答案 5 :(得分:0)
我最近有一个类似的问题。我有一个表单和PHP函数,在表单提交后即可运行。但是,我需要先运行JavaScript。
// This variable is used in order to determine if we already did our js fun
var window.alreadyClicked = "NO"
$("form:not('#press')").bind("submit", function(e){
// Check if we already run js part
if(window.alreadyClicked == "NO"){
// Prevent page refresh
e.preventDefault();
// Change variable value so next time we submit the form the js wont run
window.alreadyClicked = "YES"
// Here is your actual js you need to run before doing the php part
xxxxxxxxxx
// Submit the form again but since we changed the value of our variable js wont be run and page can reload (and php can do whatever you told it to)
$("form:not('#press')").submit()
}
});
答案 6 :(得分:-3)
您可以通过添加
重新激活操作this.delegateEvents(); // Re-activates the events for all the buttons
如果将其添加到骨干js视图的render函数中,则可以根据需要使用event.preventDefault()。