如何使用JQuery .live更改排除焦点更改?

时间:2010-10-20 00:59:01

标签: jquery

我有一个脏文本变量,我需要在文本更改,单选按钮更改或表单中的下拉列表更改中设置。不幸的是通用:

$(':input').live('change',function(){... }) 

还会检测焦点的变化...从而对脏文本产生误报。

2 个答案:

答案 0 :(得分:0)

回调函数将eventType作为第一个参数。检查它是否为focus并忽略它,如果是的话。请参阅method declaration

答案 1 :(得分:0)

你遇到了更大的问题,因为change无法检测到文字更改,除非重点发生变化。无线电按钮和下拉列表会立即触发change但不会发送文字。

来自jQuery .change() 文档:

  

更改事件在其值更改时发送到元素。此事件仅限于元素,框和元素。对于选择框,复选框和单选按钮,当用户使用鼠标进行选择时会立即触发事件,但对于其他元素类型,事件将延迟,直到元素失去焦点。

对于文字,通常的解决方案是检查每个 .keyup() 的更改

为了确保您没有模糊,可以使用 event.type 而不是blur

$(selector).change(function(event) {
    if (event.type == "blur") return false;
    ....
});

但只有.change()才会需要这个,如果您要检查下面的按键,则不需要这样做:

因此,对于文本,您必须执行以下操作:

$(function() {                         // <== Doc ready  

    var inputVal = $("input").val();   // a variable to hold the text
                                       // set it up w the initial value then see 
                                       // if the input value changes.

    $("input").keyup(function(event) {

        // check for change of the text field after each key up
        if(this.value != inputVal)
        {
            // Do your search, etc.
            // ...

            // Reset the temp value for the next comparison
            inputVal = this.value
        }
    });
});