我正在使用现有的javascript(我无法改变)并需要检查提交上的内容。
如果我的条件为真,则不应该应用其他提交处理程序。
如果我的条件为假,则应适用所有其他提交处理程序。
到目前为止我尝试过:
var form = jQuery('form'),
that = this,
events = $._data(form[0]).events['submit'];
form.off('submit');
form.on('submit', function (event) {
if (that.myCondition()) {
event.preventDefault();
event.stopPropagation();
return false;
} else {
console.log('Call these: ', events);
}
});
此时events
始终为空。
我打电话给form.off('submit')
时它是空的,我也没有让它与深度克隆一起工作。
更新: 在这个jsfiddle中,您会看到两个事件都被触发了。我想要一个(最好是我添加LAST 的一个)被解雇并防止另一个被解雇。
答案 0 :(得分:1)
答案 1 :(得分:1)
尝试使用$.Callbacks("stopOnFalse")
var callbacks = $.Callbacks("stopOnFalse");
// if `input.val().length === 0` `fn1` not called
var fn2 = function fn2(event) {
// `this`:`form` element
// console.log(this);
event.preventDefault();
event.stopPropagation();
console.log('1st submit called:', input.val().length);
if (input.val().length === 0) {
// `input.val().length === 0`
// do stuff , do not do stuff ? here
output1.html('Input needed!');
// reset `output2` `html`
output2.html("...");
// return `false` to "stop" `callbacks` queue;
// `fn1` not called
return false;
}
};
// if `input.val().length !== 0` , `fn1` called,
// else `fn1` not called
var fn1 = function fn1(event) {
// do stuff
// call `event.preventDefault();` , here, if needed;
// else call `output2.html('success!');` , submit form
// event.preventDefault();
console.log('2nd submit called:', input.val().length);
output2.html('success!');
};
// add `fn2` , `fn1` to `callbacks` queue
callbacks.add(fn2, fn1);
// call both `fn2` , `fn1` if `input.val().length !== 0` ,
// else, do not call `fn1`
form.on('submit', function (event) {
// `fire` `callbacks` `fn2` , `fn1` with context `this`:`form` ,
// pass `event` as parameter to `fn2`, `fn1`
callbacks.fireWith(this, [event])
});
jsfiddle http://jsfiddle.net/bkdm7fzt/3/