Когда я разрабатывал приложение с помощью jQuery (последняя версия), мой браузер firefox решил обновить себя до версии 6. Сразу после этого я обнаружил, что стандартная функция jquery ui "sortable" не работает должным образом. Я пробовал на сайте jquery и то же самое. Пробовал с демонстрационными файлами, загруженными с пакетом jquery ui => тот же результат. Никаких хаков, никаких забот, только ваниль.

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

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

Кто-нибудь сталкивался с таким багом с firefox 6?

К вашему сведению, эта функция сортировки работала как шарм в FF 5.0.

1
Nicolas C. 29 Авг 2011 в 11:04

3 ответа

Лучший ответ

Ладно, ребята !! Я нашел первопричину такого странного поведения !!! Его название - надстройка FireQuery 1.0 для Firefox.

Когда я увидел, что Гунтрам говорит мне, что он использует FF6 с последней версией jQuery + jQuery-UI без каких-либо проблем, я подумал, может ли это быть связано с аддоном. Поэтому я отключил все и снова активировал их, один за другим, с перезапуском после каждого включения. Я нашел виновный аддон: FireQuery 1.0.

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

1
Nicolas C. 30 Авг 2011 в 08:09

Для меня сортировка работает нормально. элементы не перемещаются неожиданно.

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

Так все еще странное поведение. Я не знаю, как это работает на ff5, я на ff6, последней версии jquery.

РЕДАКТИРОВАТЬ:

После того, как я нашел это: http : //weblogs.asp.net/jeffwids/archive/2011/01/31/jquery-textbox-in-sortable-is-not-clickable-selectable.aspx Я внимательно рассмотрел опцию отмены, предоставляемую jquery-sortable.

Я наконец смог решить это так:

<ul id="sortable">
    <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span><input type="text" value="text" ></input></li>
    <li class="ui-state-default" style="height: 70px;"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span><textarea cols="20" rows="3">textarea</textarea></li>
    <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span><button>button</button></li>
</ul>
<script>
        // initialize the sortable including the cancel option
        $( "#sortable" ).sortable({cancel: 'input,button,textarea'});
</script>
0
Guntram 29 Авг 2011 в 20:10

У меня точно такая же проблема. После дня тестирования я выяснил, в чем проблема и что вызывает такое поведение.

Позвольте мне сначала показать вам, для чего мы используем класс sortable.

-----------
| Header  |
-----------
|         |
|Contents |
-----------

Заголовок можно перетаскивать. Если вы быстро или беспорядочно перемещаете курсор мыши при перетаскивании, и курсор каким-то образом перемещается за пределы заголовка (например, на содержимое), div застревает к курсору.

Чтобы повторно закрепить div на странице, вы можете снова быстро переместить курсор и попытаться вернуть его в заголовок. Затем кажется, что события повторно прикреплены, и вы можете снова разместить div на странице.

Подводя итог, можно сказать, что мышь смещается с div с присоединенными сортируемыми событиями, поэтому объект не видит события мыши или щелчка, которые возвращают объект на страницу.

К сожалению, я не знаю, как это исправить.

ИЗМЕНИТЬ

Мы реализовали решение, которое работает для нас, но может не подходить для всех. Просто .trigger("mouseup") на перетаскиваемом элементе, когда событие щелчка происходит на любом элементе, который нельзя перетаскивать. Это вернет перетаскиваемый элемент обратно на страницу.

0
psynnott 11 Июн 2012 в 15:18