何が起こるかというと、フォーカスが #input を離れたときに onChange が発生します。あなたの場合、これはボタンをクリックすることと一致します。Tab を押してから、ボタンをクリックしてみてください。
この特定のケースを処理するための 1 つの解決策は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/