4

配列内のボタンにイベントハンドラーを割り当てようとしています。ボタンを押すと、関数を呼び出す必要がありますが、その理由を理解できません。これが私のコードです:

var btns = [];
    btns.push($('<div />').addClass('mvn_no mvn'));
    btns.push($('<div />').addClass('mvn_n mvn'));
    btns.push($('<div />').addClass('mvn_ne mvn'));
    btns.push($('<div />').addClass('mvn_o mvn'));
    btns.push($('<div />').addClass('mvn_c'));
    btns.push($('<div />').addClass('mvn_e mvn'));
    btns.push($('<div />').addClass('mvn_so mvn'));
    btns.push($('<div />').addClass('mvn_s mvn'));
    btns.push($('<div />').addClass('mvn_se mvn'));
    for ( var i = 0; i < btns.length; i++) {
        btns[i].mousedown(function() {
            moveImage(this);
        }).mouseup(function() {
            clearTimeout(tMovement);
        }).mouseout(function(){
            clearTimeout(tMovement);
        });
        table.find('td:eq(' + i + ')').append(btns[i]);
        $($options.expose.elementMovement).empty().append(table);

    }
    alert($._data( $("div.mvn_so"), "events" ));

このコードが実行されたら、ボタンをクリックしても何も起こりません。アラートのみが含まれているダミー関数を呼び出してみましたが、それでも機能しません。また、特定の要素でイベントを取得しようとしましたが、未定義が返されます。どんな助けでも大歓迎です。

4

2 に答える 2

2

それで、何時間ものデバッグの後、私はついに私のコードを壊している犯人を見つけました。.empty() 私がそれを削除したとき、それはひどいものでした$($options.expose.elementMovement).empty().append(table);、コードはうまく機能しました。なぜそれがそのまま機能しなかったのか分かりませんが、今は機能していることを嬉しく思います。空を別の行に入れても、コードが壊れます。

于 2013-01-30T06:57:57.747 に答える
0

次のようなものを試してください:http://jsfiddle.net/ADGSc/

$('#myTable').on({
    'mousedown': function() {
        moveImage(this);
    },
    'mouseup': function(something) {
        clearTimeout(tMovement);
        status.text('mouseup: ' + $(this).attr('class'));
    },
    'mouseout': function(something) {
        clearTimeout(tMovement);
        status.text('mouseout: ' + $(this).attr('class'));
    }
}, 'div');

これはあなたが望むものとは正確に一致しないかもしれませんが、うまくいけば、それはあなたを正しい道に導くでしょう。

.on()jQueryの関数の詳細については、 http: //api.jquery.com/on/をご覧ください。

于 2013-01-30T04:44:57.367 に答える