2011-02-11 100 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

相關問題