了解如何触发更改事件

时间:2012-04-23 09:16:09

标签: javascript jquery

我想知道如何触发更改事件。我想确定它是通过鼠标点击触发,还是由键盘上的键击触发。

编辑:

确定。这就是我想做的。这是简单的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);
    }
});

1 个答案:

答案 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>