2010-11-08 3 views
3

Существует таблица (только таблица html), в которой перечислены пользователи, и вы можете удалить определенного пользователя, нажав ссылку удаления. Обычный способ я делаюКакова наилучшая практика привязки события jQuery click к каждому тегу привязки в каждой строке таблицы.

<% foreach (var user in Model.Users) {%> 
<tr > 
    <td align="right"><%= user.Name %></td> 
    <td><%= user.Level %></td> 
    <td align="center"> 
    <a href="#" onclick="return deleteUser('<%= user.Name %>');"> 
     <%= Html.Image("trash.gif") %> 
    </a> 
    </td> 
</tr> 
<%)%> 

, но я хочу, чтобы прикрепить нажмите событие по ссылке в не навязчивым образом. Я имею в виду, что я не хочу указывать метод javascript внутри тега. Я не уверен, что это лучший способ достичь этого с помощью jQuery, связывая несколько множественных якорных тегов с передачей параметров.

ответ

9

Вы можете использовать метод delegate() на столе:

$('#tableId').delegate('a', 'click', function(e) { 
    e.preventDefault(); 
    // get the user name 
    deleteUser($(this).closest('tr').children(':first').text()); 
    // or give the cell that contains the name a class 
    // deleteUser($(this).closest('tr').children('.name').text()); 
}); 

Таким образом, вы только зарегистрировать один обработчик событий.

+0

ли не JQuery внутренне связать 'onclick' для каждого' Ā' элемента? – sje397

+1

@ sje397: Нет, один обработчик привязан один раз к #tableId, и пузырь событий приведет к тому, что обработчик привяжется к таблице. –

+0

@ Джона Стриклер: hm, ok ta. – sje397

1

Для производительности и оптимизации вы можете прикрепить обработчик щелчка к этой таблице:

<table id="grid"> 
<% foreach (var user in Model.Users) {%> 
<tr > 
    <td class="name"><%= user.Name %></td> 
    <td><%= user.Level %></td> 
    <td align="center"> 
    <a href="#" class="delete"> 
     <%= Html.Image("trash.gif") %> 
    </a> 
    </td> 
</tr> 
<%)%> 
</table> 

$('#grid').click(function(e){ 
    var source = $(e.target); 
    if(source.is('.delete')){ //or source.hasClass('delete') 
     var user = source.closest('tr').find('td.name').text(); 
     deleteUser(user); 
     e.preventDefault(); 
    } 
}); 
Смежные вопросы