有一种方法让我在单击表单中的重置按钮后调用一个函数,我的意思是之后,所以首先重置表单,然后调用我的函数。正常事件冒泡会调用我的函数,然后才重置表单。现在我想避免使用setTimeout来执行此操作。
我需要的是在重置表单时调用函数,因为我使用统一和统一需要在值更改时更新。
目前我这样做:
//Reset inputs in a form when reset button is hit
$("button[type='reset']").live('click', function(){
elem = this;
//Sadly we need to use setTimeout to execute this after the reset has taken place
setTimeout(function(){
$.each($(elem).parents('form').find(":input"), function(){
$.uniform.update($(this));
});
}, 50);
});
我尝试在$(':input').change()
上执行此操作,但重置元素似乎不会触发更改事件。
预先感谢您的任何帮助。
答案 0 :(得分:7)
HTML表单有一个onReset事件,你可以在里面添加你的调用:
function updateForm()
{
$.each($('form').find(":input"), function(){
$.uniform.update($(this));
});
}
<form onReset="updateForm();">
正如Frédéric Hamidi的评论中指出的那样,您也可以像bind
那样使用$('form').bind('reset', function() {
$.each($(this).find(":input"), function(){
$.uniform.update($(this));
});
});
:
{{1}}
经过一些测试后,在重置发生之前出现两种方式,而不是之后。你现在这样做的方式似乎是最好的方式。
在此question
中找到了相同的结论答案 1 :(得分:7)
我还没有在所有浏览器中测试过,但您可以在点击事件中自行订购: http://jsfiddle.net/vol7ron/9KCNL/1/
$(document).ready(function() {
$("input:reset").click(function() { // apply to reset button's click event
this.form.reset(); // reset the form
window.alert($("input:text").val()); // call your function after the reset
return false; // prevent reset button from resetting again
});
});
答案 2 :(得分:4)
前一段时间我在调试一个与谷歌IE相关的插件,我用一个冒泡的技巧解决了主要错误。这就是为什么我在这个解决方案中立即想到你的问题(当然应该是跨浏览器):
<form>
<div id="capture_bubble">
<input type="text"><input type="reset">
</div>
</form>
通过这种方式,您可以在触发重置事件后使用$('#capture_bubble')捕获冒泡。
您可以使用以下方式进行快速测试:
(function($) {
$(function() {
$('#capture_bubble').live('click', function(){
console.debug('capture_bubble');
alert('capture_bubble')
})
$("input[type='reset']").live('click', function(){
this.form.reset(); // forcing reset event
console.debug('reset');
alert('reset')
});
});
})(jQuery);
请注意: this.form.reset(); (由于杰夫威尔伯特观察所做的更改)
答案 3 :(得分:3)
你不需要等待50毫秒。如果使用setTimeout且超时为零,则实际上意味着“将此代码推送到事件堆栈”。由于表单重置保证首先触发,因此setTimeout中的代码(在表现良好的javascript解释器中)可以保证访问所需的表单值(重置后)。你应该可以使用下面的代码,无罪。
var afterReset = function(){
var pushMeOntoTheEventStack = window.setTimeout(function(){
$("#form input").each(function(){
console.log( this.name + ' = ' + this.value );
});
},0);
};
$("#form").on("reset",afterReset);
答案 4 :(得分:0)
尝试此解决方案
目标:
示例:
$("button[type='reset']").on('click', function(evt) {
evt.preventDefault();
$(evt.target).trigger('reset');
// enter code to run after reset
$.each($(this).find(":input"), function(){
$.uniform.update($(this));
});
});