Почему не работает отрицательный селектор в jQuery UI Сортируемое свойство 'cancel'? - PullRequest
2 голосов
/ 21 декабря 2011

Я хочу, чтобы строка в jQuery UI Sortable была сортируемой, только если она имеет класс cansort.У меня установлено значение cancel: ':not(.cansort)', но оно вообще не позволяет мне что-либо сортировать, включая строки, имеющие класс cansort.

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

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

1 Ответ

1 голос
/ 21 декабря 2011

Причина этого заключается в том, что опция cancel обрабатывается виджетом ui.mouse (виджетом, который используется несколькими виджетами jQueryUI для обработки событий мыши).Проверьте эту строку кода :

elIsCancel = (typeof this.options.cancel == "string" 
    && event.target.nodeName ? 
        $(event.target).closest(this.options.cancel).length : false);

Это означает, что ваш селектор запускается с closest на элементе, который был mousedown включен.Итак, давайте возьмем li.cansort сортируемый элемент.Это создаст селектор jQuery, который будет выглядеть примерно так:

$("li.cansort").closest(":not(.cansort)").length;

Это всегда вернет длину 1, потому что родительский ul для всех сортируемых li s не имеет класса .cansort.Это означает, что с этим типом селектора сортировка будет всегда отменяться.

К счастью, это легко обойти, если вы просто включите имя тега в селектор cancel:

cancel: "li:not(.cansort)"

Вот пример: http://jsfiddle.net/7hSnc/ (попробуйте удалить li из селектора cancel)

...