当焦点离开#input 时会触发 onChange。在您的情况下,这与单击按钮同时发生。尝试按 Tab,然后单击按钮。
为了处理这种特殊情况,一种解决方案是延迟对change
事件的调用,以检查按钮是否同时被点击。在实践中 100 毫秒有效。这是代码:
$().ready(function() {
var stopTheChangeBecauseTheButtonWasClicked = false;
$('#button').on('click', function(e) {
stopTheChangeBecauseTheButtonWasClicked = true;
$('#wtf').html("I don't need to change #input in this case");
});
$('#input').on('change', function(e) {
var self = this;
setTimeout(function doTheChange() {
if (!stopTheChangeBecauseTheButtonWasClicked) {
$(self).val($(self).val() + ' - changed!');
} else {
stopTheChangeBecauseTheButtonWasClicked = false;
}
}, 100);
});
});
还有小提琴 - http://jsfiddle.net/dandv/QhXyj/11/