У меня есть таблица, в которой я использую jQuery UI "sortable".В таблице у меня есть строки, состоящие из «маркера перетаскивания» для захвата и изменения порядка таблицы, и ячеек с интерактивными элементами, например:
<table id="test-table">
<tbody>
<tr>
<td class="handle"><div class="ui-icon ui-icon-arrowthick-2-n-s" /></td>
<td class="clickycell"><a href="#">Testing 1</a></td>
</tr>
<tr>
<td class="handle"><div class="ui-icon ui-icon-arrowthick-2-n-s" /></td>
<td class="clickycell"><a href="#">Testing 2</a></td></td>
<tr>
<td class="handle"><div class="ui-icon ui-icon-arrowthick-2-n-s" /></td>
<td class="clickycell"><a href="#">Testing 3</a></td></td>
</tr>
</tbody>
</table>
В своем коде я делаю таблицу сортируемой итакже используйте jQuery live()
, чтобы привязать событие click к элементам, на которые можно нажимать, например:
$(function() {
/*
Using live() because in my real code table rows are dynamically added.
However, if I use click() instead, as in the commented-out code, it works
fine, without any need to click twice.
*/
// $(".clickycell a").click(function() {
$(".clickycell a").live('click', function() {
alert("Successful click");
return false;
});
$("#test-table tbody").sortable({
handle: "td.handle", /* Use the draggy handle to move, not the whole row */
cursor: "move"
});
});
Я использую live()
, поскольку строки можно динамически добавлять в таблицу в реальном коде.
Моя проблема заключается в следующем: если я щелкаю по любому из активируемых элементов перед сортировкой, они работают нормально.Однако после того, как пользователь перетаскивает строки, чтобы изменить их порядок, я должен щелкнуть дважды , чтобы зарегистрироваться.После этого второго щелчка элементы, по которым можно нажимать, возвращаются в «нормальное состояние», для чего требуется всего один щелчок, до тех пор, пока в следующий раз не будут перетаскиваться строки.закомментированный код - тогда единственный щелчок работает отлично во все времена, но я бы предпочел использовать live()
, как я уже сказал.И мне любопытно, почему он не работает.
Здесь живой пример jsFiddle .Попробуйте перетащить строку в другую позицию, а затем нажать на любую из ссылок «Тестирование ...».В Firefox, по крайней мере, мне нужно дважды щелкнуть, чтобы получить предупреждение «Успешный щелчок».
Есть идеи?