如何使用jquery在输入文本框上触发blur / focusout事件?

时间:2012-06-02 12:24:41

标签: jquery events blur focusout

我正在使用1.7.2,其中我理解这应该有效:

// cell is a jquery representation of a <td> element
cell.append($("<input/>", { "type": "text" }).val(content));        
cell.children()[0].focus();
cell.children()[0].on("blur", function() {
    alert("blur");
}

附加输入框,抓取焦点,然后javascript控制台告诉我:

Uncaught TypeError: Object #<HTMLInputElement> has no method 'on'

如果有人知道如何捕捉模糊/聚焦事件,我将不胜感激。

3 个答案:

答案 0 :(得分:4)

你应该绑定委托事件,即。直播事件到那些输入,因为它们后来附加到DOM,因此它们需要实时事件处理程序。

$(cell).on('blur focusout', ':text', function() {
   alert(this.value);
});

然后触发如下:

$(':input:first', cell).blur(); // or $(':text', cell).trigger('blur');

$(':input:first', cell).focusout(); // or $(':text', cell).trigger('focusout');.

根据您的代码

cell.children(':input:eq(0)').focus().on("blur", function() {
    alert("blur");
};

cell.children(':input:first').focus().on("blur", function() {
    alert("blur");
};

答案 1 :(得分:4)

您正在使用[0]访问DOM元素,并且表现得像是jQuery对象。

如果您只想要第一个,则需要使用eq()来获取jQuery对象。

cell.children().eq(0).focus().on("blur", function() {
    alert("blur");
};

答案 2 :(得分:0)

你在DOM元素上调用.on,而不是jQuery对象,试试这个:

var input = $("<input/>", { "type": "text", val: content } );
cell.append(input);
input.focus();
input.on( "blur", function(){
    alert( "blur" );
});