Javascript Jquery绑定到keyup

Javascript Jquery绑定到keyup,javascript,jquery,Javascript,Jquery,绑定到textarea控件的keyup事件时遇到一些问题。我正在尝试下面的方法 var shortDescInput = $('nobr:contains("Short Description")').closest('tr').find($('textarea[title="Short Description"]')); // this doesn't work shortDescInput.bind('keyup', function () { countS

绑定到textarea控件的keyup事件时遇到一些问题。我正在尝试下面的方法

var shortDescInput = $('nobr:contains("Short Description")').closest('tr').find($('textarea[title="Short Description"]'));

    // this doesn't work
    shortDescInput.bind('keyup', function () {
        countShortDescChars();
    });

    // Nor this
    shortDescInput.keyup(function () {
        countShortDescChars();
    });
我是不是错过了一些很明显的东西?这适用于其他控件,例如将事件绑定到单选按钮。我已经检查过了,我正在挑战性地选择正确的文本区域

var shortDescInput = $('nobr:contains("Short Description")').closest('tr').find($('textarea[title="Short Description"]'));
我似乎从来没有得到过keyup事件……

查找($('textarea[title=“Short Description”]))
效率很低。出于您的目的,
find
应该使用选择器作为参数

当您将jQuery对象传递给
find
时,jQuery首先从顶部查询DOM并查找与该选择器匹配的所有元素。然后,
find
循环遍历所有这些结果,直到找到一个与指定父项匹配的结果

相反,您应该使用:

find('textarea[title="Short Description"]')
另外,请使用
.on
而不是
.bind
.bind
由于效率低下,在未来的版本中被设置为不推荐使用

shortDescInput.on("keyup", countShortDescChars);
以及经修订的守则:

$(function () {
    var shortDescInput = $('nobr:contains("Short Description")').closest('tr').find('textarea[title="Short Description"]');

    shortDescInput.on("keyup", countShortDescChars);
});
find($('textarea[title=“Short Description”]”)效率极低。出于您的目的,
find
应该使用选择器作为参数

当您将jQuery对象传递给
find
时,jQuery首先从顶部查询DOM并查找与该选择器匹配的所有元素。然后,
find
循环遍历所有这些结果,直到找到一个与指定父项匹配的结果

相反,您应该使用:

find('textarea[title="Short Description"]')
另外,请使用
.on
而不是
.bind
.bind
由于效率低下,在未来的版本中被设置为不推荐使用

shortDescInput.on("keyup", countShortDescChars);
以及经修订的守则:

$(function () {
    var shortDescInput = $('nobr:contains("Short Description")').closest('tr').find('textarea[title="Short Description"]');

    shortDescInput.on("keyup", countShortDescChars);
});

要验证选择器是否正常工作,请将.length与console.log()或老式警报()一起使用:

您还可以逐步确定未返回任何内容的用户:

alert($('nobr:contains("Short Description")').length);
alert($('nobr:contains("Short Description")').closest('tr').length);
alert($('nobr:contains("Short Description")').closest('tr').find('textarea[title="Short Description"]').length);
第二次尝试使用.on()而不是.bind()

shortDescInput.on('keyup',function(){countShortDescChars();});

要验证选择器是否正常工作,请将.length与console.log()或老式警报()一起使用:

您还可以逐步确定未返回任何内容的用户:

alert($('nobr:contains("Short Description")').length);
alert($('nobr:contains("Short Description")').closest('tr').length);
alert($('nobr:contains("Short Description")').closest('tr').find('textarea[title="Short Description"]').length);
第二次尝试使用.on()而不是.bind()

shortDescInput.on('keyup',function(){countShortDescChars();});

所以我跟着你的小提琴演奏。。。 您的选择器有问题。

  • 首先,我从js部分删除脚本标记
  • 然后删除html中的脚本标记,因为它破坏了功能
  • 切换到jQuery 1.8.0,因为MooTools不是我们想要的
  • 添加了
    shortDescInput=$('textarea')在巨型选择器之后,事件被触发
  • 再次添加
    shortDescInput=$('textarea')以使计数器工作
现在,让我们再次尝试找出选择器不起作用的原因

编辑:

找到了

用.parent().next()替换了你的.closest(),因为我觉得.closest()是针对父母的

var shortDescInput = $('nobr:contains("Short Description")').parent().next().find('textarea[title="Short Description"]');

所以我跟着你的小提琴演奏。。。 您的选择器有问题。

  • 首先,我从js部分删除脚本标记
  • 然后删除html中的脚本标记,因为它破坏了功能
  • 切换到jQuery 1.8.0,因为MooTools不是我们想要的
  • 添加了
    shortDescInput=$('textarea')在巨型选择器之后,事件被触发
  • 再次添加
    shortDescInput=$('textarea')以使计数器工作
现在,让我们再次尝试找出选择器不起作用的原因

编辑:

找到了

用.parent().next()替换了你的.closest(),因为我觉得.closest()是针对父母的

var shortDescInput = $('nobr:contains("Short Description")').parent().next().find('textarea[title="Short Description"]');

问题是,至少在小提琴中,
不在
中,因此它被浏览器从DOM中删除。将
包装在
中使小提琴起作用。

演示:

问题是,至少在小提琴中,
不在
中,因此它被浏览器从DOM中删除。将
包装在
中使小提琴起作用。

演示:

find
也使用jQuery对象:(是的,我也很惊讶)在这种情况下,使用jQuery对象的效率要低得多。是的,是的(注释太短)谢谢大家,我已经更改了选择器(我已经确认旧的选择器正在工作),但没有修复问题。。。也尝试了.on而不是.bind,但这也没有帮助。一切都很奇怪!我不知道这是否相关,但这是在SharePoint环境中,ListFieldIterator将控件吐到页面上。我不认为它应该停止任何工作,但是因为我已经绑定到其他事件,在不同的控件上没有问题
find
也使用jQuery对象:(是的,我也很惊讶)在这种情况下,使用jQuery对象的效率要低得多。是的,是的(注释太短)谢谢大家,我已经更改了选择器(不过,我已经确认了旧的那台正在工作)这并没有解决问题…还尝试了.on而不是.bind,这也没有帮助。非常奇怪!我不知道这是否相关,但这是在SharePoint环境中,ListFieldIterator将控件吐到页面上。我认为它不应该阻止任何工作,因为我已经绑定到其他控件在不同控件上没有问题的事件扫描您设置了一个演示?谢谢。嗨,好吧,这有点混乱,但这只是发生了什么的粗略想法…请注意,有点愚蠢,我只是提取了我为上面的JSFIDLE链接处理的表,因此该表实际上格式正确。您可以设置演示吗开?谢谢。嗨,好的,这有点贵