jQuery UI проблема сортировки и нажатия кнопки live () - нужно дважды щелкнуть после сортировки для регистрации - PullRequest
5 голосов
/ 25 ноября 2010

У меня есть таблица, в которой я использую 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, по крайней мере, мне нужно дважды щелкнуть, чтобы получить предупреждение «Успешный щелчок».

Есть идеи?

Ответы [ 2 ]

5 голосов
/ 14 января 2011

У меня возникла такая же проблема с "живым" и сортируемым, когда я нашел ваше сообщение (у делегата тоже такая же проблема).Чтобы проконтролировать наблюдение @Stephen, сделавшее один щелчок на ручке перетаскивания, прежде чем обработчик щелчков элемента связывался с живыми работами без необходимости дважды щелкать ... Я успешно использовал этот обходной путь.Для взлома я не нахожу это слишком оскорбительным.

$('table.demo tbody').sortable({
    handle: 'td.drag',
    stop: function(e,ui){
        $('td.drag', ui.item).click();
    }
});

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

2 голосов
/ 30 ноября 2010

К сожалению, закончить ответом " Это ошибка ", но, думаю, иногда такое случается. Может быть, я вычисту свой логин на GitHub и раскошелюсь, чтобы посмотреть, смогу ли я отследить его и найти исправление.

...