将事件处理程序添加到按钮数组不起作用

时间:2013-01-30 03:56:24

标签: javascript javascript-events mouseevent

我正在尝试将事件处理程序分配给数组中的按钮。当我按下按钮时,它应该调用一个函数,但只是没有,也无法找出原因。 这是我的代码

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" ));

一旦这段代码运行,我点击按钮就没有任何反应。我甚至试过调用一个虚拟函数,它只有一个警报,但它仍然不起作用。我还尝试在给定元素上获取事件,并返回undefined。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

因此,经过数小时的调试,我终于找到了破坏我的代码的罪魁祸首。这是该死的.empty() 在我$($options.expose.elementMovement).empty().append(table);删除它时,代码运行得很好。我不知道为什么它不能正常工作,但我很高兴它现在有效。即使将空单位放在单独的行中也会破坏我的代码。

答案 1 :(得分: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');

这可能不是完全你想要的东西,但希望它能引导你走上正确的道路。

在此处详细了解jQuery的.on()功能:http://api.jquery.com/on/