我想知道如何触发更改事件。我想确定它是通过鼠标点击触发,还是由键盘上的键击触发。
确定。这就是我想做的。这是简单的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事件混淆。当我使用键盘键时,它也会调用change事件。因此,如果我使用箭头键或任何其他键来更改状态,则每次按键都会触发更改事件,我希望不会发生这种情况。
预期方法:
1)如果我能弄清楚,事件是如何被触发的,也许我可以覆盖chrome的工作。但问题是.which对.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);
}
});
答案 0 :(得分:1)
<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<input id="inputsource" value="do something :)">
<div id="log"></div>
<script>
$('#inputsource').bind('change keydown mousedown',function(e){
console.log(e.type);
$('#log').html(e.type);
});
</script>
</body>
</html>