Клик срабатывает после сортировки сортируемого пользовательского интерфейса jQuery - PullRequest
1 голос
/ 18 мая 2011

Эта проблема возникает в Safari. У меня не возникает проблема с IE (который является первым).

У меня есть сортируемый:

<ul id='srt'>
    <li><a class='url' href='http://www.test.com'>test</a></li>
    <li><a class='url' href='http://www.test1com'>test1</a></li>
    <li><a class='url' href='http://www.test2com'>test2</a></li>
</ul>

и следующий скрипт:

$(document).ready( function() {
    $("#srt").sortable();

    $(".url").click( test );
});

function test() {
    $(this).text( "done" );
    return false;
}>

Нажатие на ссылку изменит текст на «готово», но перетаскивание также изменит текст на «готово». Но я не хочу нажимать на ссылку в конце рода.

Как я уже сказал: IE запускает функцию, как и должно, сортирует ссылку и не вызывает привязанную функцию щелчка, но Safari вызывает щелчок ...

Как я могу предотвратить это?

Редактировать: Я создал jFiddle для этого, чтобы вы могли попробовать его.

1 Ответ

5 голосов
/ 03 июня 2011

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

Hwr в вашем случае проще, к счастью.Вы никогда не должны передавать обработчик событий, как это в jquery.Используйте этот синтаксис:

$(".url").click( function(){
    test();
});

Это работает!

РЕДАКТИРОВАТЬ: мои извинения, он все еще вызывает обработчик при сортировке.Вот два решения!

Наилучшее:

$("#srt").sortable({ helper: 'clone' });
$(".url").click( function() { $(this).text( "done" ); } );

Использование опции helper: 'clone' позволяет плагину не запускать обработчики для элементов.(обратите внимание, что я включил тело test () в анонимную функцию, в противном случае вы бы не смогли использовать «this»)

Ужаснее, и это вызывает проблемы с выпадением событий:

$("#srt").sortable();

$(".url").live('click', function() { $(this).text( "done" ); } );

Это только для целей обучения!поскольку события live () не находятся в самих элементах, они не запускаются сортируемым!

...