1

我正在开发一个简单的程序,该程序旨在教您(我)如何使用适用于 Android 的 8pen 键盘进行书写。

在每次按键时,我都会检查输入值是否与“模式属性”匹配,html 会发生变化,以便出现新的课程。这工作正常。但是,当我更新 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]+'"/>')
}

为什么?

4

5 回答 5

1

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

于 2012-07-21T08:08:39.957 回答
1

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

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

于 2012-07-21T08:10:22.390 回答
1

代替

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

利用

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

实时处理程序也附加到将来声明的类型。最初,当您使用 时.keyup,它只是将处理程序附加到您之前定义的输入。在 using.live时,它会将处理程序附加到所有已经定义且将在未来定义的输入元素。

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

于 2012-07-21T08:11:07.333 回答
1

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

而不是使用.bind()

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

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

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

有关.bind() 和 .on() 之间的区别,请参阅这篇出色的帖子

于 2012-07-21T08:11:42.797 回答
1

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

.on( 事件 [, 选择器] [, 数据] , 处理程序(eventObject) )

$("#form").on('keyup', 'input', (function(event){
    // ....
})
于 2012-07-21T08:12:39.017 回答