変更イベントがどのようにトリガーされているかを知りたかったのです。マウスクリックでトリガーされたのか、キーボードからのキーストロークによってトリガーされたのかを判断したいと思います。
編集:
Ok。これが私がやりたいことです。これは、州の変更イベントで都市のリストを取得する単純な ajax 作業です。私のコードはすべて優れており、実際に機能します。
$('#state').change(function(event) {
$.ajax({
url: target,
type: 'POST',
data: data,
success: function(data, textStatus, XMLHttpRequest) {
$('#cityBox').html( data );
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert("error");
}
});
});
問題: Chrome が .change イベントを台無しにします。キーボードのキーも使用すると、変更イベントが呼び出されます。したがって、矢印キーまたはその他のキーを使用して状態を変更すると、キーを押すたびに変更イベントがトリガーされますが、これは発生したくありません。
予想されるアプローチ:
1)イベントがどのようにトリガーされているかがわかれば、クロムの動作をオーバーライドできるかもしれません。しかし、問題は .change イベントでは機能しないことです。常に undefined を返します。
2) if else を使用する。このようなものですが、私が知っているようにうまくいかないことは確かです.
$('#state').change(function(event) {
if(!$('#state').keyup()) {
$.ajax({
url: target,
type: 'POST',
data: data,
success: function(data, textStatus, XMLHttpRequest) {
$('#cityBox').html( data );
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert("error");
}
});
}
});
3)キー値を変数に保存し、それが存在するかどうかを確認します。この動作の問題は、イベントがマウスでトリガーされたときに変数 this_key を設定できないことです。
var this_key=0;
$('#state').change().keyup(function(e) {
var code = (e.keyCode ? e.keyCode : e.which);
if(code!= 13) { // If not enter key
this_key=code;
}
});
$('#state').change(function(event) {
if(!this_key) {
setTimeout(function(){
$.ajax({
url: target,
type: 'POST',
data: data,
success: function(data, textStatus, XMLHttpRequest) {
$('#cityBox').html( data );
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert("error");
}
});
}, 100);
}
});