当我更新HTML时,Keydown事件停止触发

时间:2012-07-21 08:02:41

标签: javascript jquery

我正在开发一个简单的程序,用于教你(我)如何使用8pen键盘为Android编写。

在每个keydown上,我检查输入值是否与html更改的“pattern-attribute”匹配,以便出现新课程。这很好用。但是当我更新keyup函数时会停止触发。

var lesson = 0;
$(document).ready(function() {
    new_lesson(lesson)
    lesson++
    //den här grejjen aktiverar inte på lektion 2
    $("input").keyup(function(event){
        var value = $(this).val();
        console.log(value)
        if (isValidInput ('input')) {
            new_lesson(lesson);
        }
    })
});

function isValidInput (input) {
    return $(input)[0].checkValidity();
}

function new_lesson(lesson_number){
    $('#form').html('<label>'+data[lesson_number]+'</label> <input type="text" pattern="'+data[lesson_number]+'"/>')
}

为什么?

5 个答案:

答案 0 :(得分:1)

您的事件已设置为html代码中的最后一个输入,并且您重写了该部分,因此事件也会丢失。你需要将事件设置放在new_lesson函数中。

答案 1 :(得分:1)

每次更换html时,都会创建一个输入元素的新实例,因此事件处理程序就会消失。

尝试$('input').live('keyup',handler());

答案 2 :(得分:1)

而不是

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

使用

$("input").live('keyup',function(){

live处理程序也附加到将来声明的类型。最初,当您使用.keyup时,它只是将处理程序附加到您之前定义的输入。在使用.live时,它将处理程序附加到已定义的所有输入元素和&amp;即将被定义的未来。

编辑:从jQuery 1.7开始,不推荐使用.live()方法。使用.on(与实时用法相同)

答案 3 :(得分:1)

绑定事件会直接将事件处理程序注册到DOM元素<input>。当您在更新密钥时更新<input>时,该事件不再注册到该新元素。

而不是使用.bind()

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

使用.on(),它适用于注册事件后添加到页面的所有元素:

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

请参阅此excellent post for the differences between .bind() and .on()

答案 4 :(得分:1)

对于动态生成的元素,您应该委派事件,您可以使用on()方法,尝试以下方法:

  

.on(events [,selector] [,data],handler(eventObject))

$("#form").on('keyup', 'input', (function(event){
    // ....
})