1

私は、Android用の8penキーボードを使用して書く方法をあなた(私)に教えるために構築された簡単なプログラムに取り組んでいます。

キーを押すたびに、入力値が「pattern-attribute」と一致するかどうかを確認し、新しいレッスンが表示されるようにhtmlを変更します。これは正常に機能します。ただし、更新すると、キーアップ機能のトリガーが停止します。

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要素の新しいインスタンスを作成するため、イベントハンドラーはなくなります。

試してみてください$('input').live('keyup',handler());

于 2012-07-21T08:10:22.390 に答える
1

それ以外の

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

使用する

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

ライブハンドラーは、将来宣言される型にもアタッチします。最初は、を使用.keyupすると、以前に定義した入力にハンドラーがアタッチされただけです。を使用する.liveと、ハンドラーは、すでに定義されており、将来定義される予定のすべての入力要素にアタッチされます。

編集: jQuery 1.7以降、.live()メソッドは非推奨になりました。.onを使用します(ライブと同じ使用法)

于 2012-07-21T08:11:07.333 に答える
1

イベントをバインドすると、イベントハンドラーがDOM要素に直接登録されます(この場合は)<input><input>キーアップが発生するたびに更新しているため、イベントはその新しい要素に登録されなくなります。

使用するのではなく.bind()

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

.on()イベントの登録後にページに追加されたすべての要素で機能する使用:

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

.bind()と.on()の違いについては、この優れた投稿を参照してください

于 2012-07-21T08:11:42.797 に答える
1

動的に生成された要素の場合、イベントを委任する必要があります。on()メソッドを使用して、次のことを試してください。

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

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