1

我正在使用 jquery 1.8.3,因此尝试从使用 .live() 更改为 .on() 就像 SO 上的许多其他人一样-无法正常工作-我做错了什么?如果使用 .live() 如此错误,为什么它的工作效果如此稳定!

( txtbxhost 是一个没有动态添加的文本框,它已经在 DOM 中)

$('#txtbxhost').live('input', function() {
  // works everytime            
});


$('#txtbxhost').on('change', 'input',  function() {
   // fails everytime           
});

$('#txtbxhost').on('change', '#txtbxhost',  function() {
   // fails everytime           
});

$(document).on('change', '#txtbxhost',  function() {
   // fails everytime           
});

我在这里没有想法...帮助...

4

3 回答 3

3

你可能想要:

$(document).on('input', '#txtbxhost',  function() {
   // code here           
});

检查这个小提琴

此外,change仅在blur您更改文本框中的文本后单击其他位置时才有效。

所以,这也应该工作

$(document).on('change', '#txtbxhost',  function() {
   // fails everytime           
});

检查更新的小提琴

于 2013-06-13T23:09:49.990 回答
2

您需要了解on()live().

实际上有两种主要的使用方法on()。如果加载时页面上存在你感兴趣的元素,可以考虑像这样直接绑定事件:

$('#txtbxhost').on('input', function () {
    // some function
});

这将与工作方式大致相同change()

如果页面加载时元素可能不存在,那么您需要使用委托事件。为此,您必须将 附加on()到页面加载时确实存在的元素。这可以是document或通常是与页面加载时存在的您感兴趣的元素最近的祖先。此委托通过查看将 DOM 元素堆栈冒泡到您绑定到的元素的事件来工作on(),然后您在该元素中寻找一个选择器来应用回调。这看起来像这样:

$('#some_static_ancestor').on('input', '#txtbxhost', function () {
    // some function
});
于 2013-06-13T23:22:42.460 回答
0
$(function(){
    $('#txtbxhost').on('input', function() {
       // do stuff   
    });
});

那应该这样做。

在您的情况下,您实际上并不需要使用 .on(),它的主要目的是处理动态创建的元素。

于 2013-06-13T23:12:24.997 回答