2011-02-11 71 views
1

当我尝试将事件数据传递给jQuery live函数时,遇到了一个问题。基本上,我有一个由多行生成的表,每行数据都由一个对象封装,我们只需调用“tbRow”即可。我想在每一行注册一个实时函数,当你点击它时,它将根据行数据的不同而行动。我构建代码的方式如下:将事件数据传递给jQuery live处理程序

MYAPP.prototype.actions = function (tbRow) { 
    var output = "<div class="select"><a href="#"> Select this row </a></div>" 
    $('div.select').live('click', {tbRow: tbRow}, function() { 
     console.log(e.data.tbRow.id + "is selected"); 
     /// do something else 
    }); 
    return output; 
}; 

此函数返回的输出被用于构建实际的表,并在同一时间,现场函数注册该行向响应点击操作。 id的打印(假设每行都有一个唯一的ID)仅用于检查我选择的是正确的行。

我遇到的问题是,我选择的每一行现在都带有第一行的ID,它只会显示第一个正确注册的ID。我能想到的一种方式来解决它,使一个连接字符串,用行ID,使得:

$('div.select_RowID1").live(....) 

但是,我不知道这是否会工作或正确的方法。

在此先感谢您的帮助。

奥利弗

回答

2

我想你可能会使用jQuery生活在一个使它就要困难得多的方式。你可以做到这一点:

$('table.live tr').live('click', function(evt){ 
    console.log($(this)); 
}); 

在这里,我已经添加了一个'活'类到表中。这将click事件绑定到所有当前和所有未来的'tr'元素。 $(this)和evt参数将告诉你哪一行被点击。

这里是一个展示的jsfiddle此:http://jsfiddle.net/rcravens/yyekt/

希望这有助于。

Bob

+0

@Bob,类似于我上面的评论。索引不是我想要在实时功能中访问的唯一参数。行对象是从服务器端一个接一个传下来的,我没有一个可以基于索引访问的数组。 thx – Oliver 2011-02-11 20:50:46

0

您使用live的方式会导致多个click事件绑定到每个div.select。每次调用函数的次数。

试试这个。它使用jQuery的index()函数来检索行相对于其他行的索引。

$('div.select').live('click', 
    function() { 
    console.log($(this).index() + " is selected"); 
    /// do something else 
}); 

function makerow(tbRow) { 
    var output = '<div class="select"><a href="#"> Select this row </a></div>' 

    return output; 
}; 

http://jsfiddle.net/ChrisMH/mLW6R/1/

编辑:更新例如

function makerow(tbRow) { 
    var output = '<div id="select' + tbRow.id + '" class="select"><a href="#"> Select this row </a></div>' 
    $("#body").append(output); 
    $("div.select#select" + tbRow.id) 
     .bind('click', 
       function() { 
        console.log(tbRow.id); 
       } 
      ); 
}; 

http://jsfiddle.net/ChrisMH/UF4tD/1/

+0

嗯...这样,我不再有访问tbRow对象在活动函数内,索引不是我需要做的其他事情的唯一数据。感谢回复。 – Oliver 2011-02-11 20:47:33

相关问题