我使用jQuery live()
函数来检测用户何时按某些特殊键(箭头等):
$('.TextBox1').live('keydown', function(e) {
var keyCode = e.keyCode || e.which;
if (keyCode == 40) {
e.preventDefault();
// ...
}
});
它工作正常几个月,突然昨天它停止工作,阻止它下面的每一行JS代码执行。我试图用.keyup
函数替换它,但这没有帮助。可能发生了什么?
答案 0 :(得分:27)
我假设您已更新到最新版本的jQuery?自{jQ1.7}以来,live()
已被弃用,现在从1.9开始删除。
相反,您应该将on()
与委托参数一起使用:
$(document).on('keydown', '.TextBox1', function(e) {
var keyCode = e.keyCode || e.which;
if (keyCode == 40) {
e.preventDefault();
//...
}
});
请注意,为了获得最佳性能,您应该将上面示例中的document
替换为.TextBox1
最接近的父元素,该元素在页面加载后不会动态附加到DOM。
答案 1 :(得分:3)
jQuery .live已弃用。 虽然不完全相同,但使用.on() 对于您的示例,它看起来像:
$('body').on('keydown', '.TextBox1', function() {
var keyCode = e.keyCode || e.which;
if (keyCode == 40) {
e.preventDefault();
...
}
}
答案 2 :(得分:3)
.live()
。
从现在开始你必须使用.on
。
答案 3 :(得分:2)
.live()
。
您可以改为使用jQuery Migrate plugin,或更改代码以使用.on
。
答案 4 :(得分:1)
.live已在jQuery 1.9中删除。如果你正在调用最新版本的jQuery,它将会中断。
更改您的代码以使用.on
答案 5 :(得分:0)
从jQuery 1.7开始,不推荐使用.live()方法。使用.on()附加事件处理程序。旧版jQuery的用户应该使用.delegate()而不是.live()。
阅读本文,了解有关live
的更多信息答案 6 :(得分:0)
答案 7 :(得分:0)
.live()
,因此您可以尝试此操作
$('.TextBox1').on('keydown', function() {
var keyCode = e.keyCode || e.which;
if (keyCode == 40) {
e.preventDefault();
...
}
}
答案 8 :(得分:0)
您是否已将jquery更新为1.7?
从jQuery 1.7开始,不推荐使用.live()方法。
使用.on()附加事件处理程序:
$('.TextBox1').on('keydown', text_box_key_down_function);
您也可以使用bind:
$('.TextBox1').bind('keydown',text_box_key_down_function);
答案 9 :(得分:0)
现在,试试:
$('.TextBox1').on('keydown', function() {
var keyCode = e.keyCode || e.which;
if (keyCode == 40) {
e.preventDefault();
...
}
}
答案 10 :(得分:0)
使用jquery网站上提到的这个。 对于你的例子,它将是
$(document).on( "keydown", ".TextBox1", function() {
});
答案 11 :(得分:0)
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="http://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
<script src="http://code.jquery.com/jquery-1.11.1.js"></script>