2010-10-26 7 views
8

пример: у меня есть не упорядоченный список, содержащий кучу входов формы.jqueryUI Сортировка: обработка .disableSelection() на вставках форм

после создания ul .sortable(), я вызываю .disableSelection() на сортируемом (ul), чтобы предотвратить выбор текста при перетаскивании элемента li.

..all хорошо, но мне нужно повторно/включить текстовый выбор на форме входов .. или форма в основном не-редактируемые ..

я нашел частичное решение @http://forum.jquery.com/topic/jquery-ui-sortable-disableselection-firefox-issue-with-inputs

  • enableSelection, disableSelection, кажется, все еще быть просто не документированы: http://wiki.jqueryui.com/Core

какие-нибудь мысли?

+0

Если бы вы могли опубликовать свой код, я мог бы, вероятно, сделать эту работу ... вы посмотрели на вариант «отменить» сортировки? Подумайте о том, как объяснить JSFiddle. (www.jsfiddle.net) – Fosco

+0

@ Fosco. Thks. был немного занят в последнее время .. Я только что опубликовал хак, который решает это. – zack

+1

В качестве примечания это не только влияет на «входы», но и «выбирает». – polkduran

ответ

22

решена. бит взлома, но работает! .. любые комментарии, как я могу сделать это лучше?

применять .sortable(), а затем включить текстовый выбор на полях ввода:


$("#list").sortable({ 
    stop: function() { 
    // enable text select on inputs 
    $("#list").find("input") 
    .bind('mousedown.ui-disableSelection selectstart.ui-disableSelection', function(e) { 
     e.stopImmediatePropagation(); 
    }); 
    } 
}).disableSelection(); 

// enable text select on inputs 
$("#list").find("input") 
.bind('mousedown.ui-disableSelection selectstart.ui-disableSelection', function(e) { 
    e.stopImmediatePropagation(); 
}); 
0

У меня была такая же проблема. Решение довольно простое:

$("#list").sortable().disableSelection(); 
$("#list").find("input").enableSelect(); 
+1

Я не вижу jQuery docs для 'enableSelect()'. Пожалуйста, поправьте меня, если я ошибаюсь, но я не верю, что он существует! – zack

+0

@zack это была, вероятно, опечатка. Исправлена. – ArtBIT

+1

Правильное имя - enableSelection(). См. Http://api.jqueryui.com/enableSelection/ –

3

JQuery UI 1,9

$("#list").sortable(); 
$("#list selector").bind('click.sortable mousedown.sortable',function(e){ 
    e.stopImmediatePropagation(); 
}); 

селектор = вход, стол, литий ....

+0

звучит здорово! это документировано, есть ли у вас ссылка? или jsFiddle? ..не то, что я скептически – zack

4

небольшое улучшение от должности Zack - JQuery Плагин

$.fn.extend({ 
    preventDisableSelection: function(){ 
     return this.each(function(i) { 
      $(this).bind('mousedown.ui-disableSelection selectstart.ui-disableSelection', function(e) { 
       e.stopImmediatePropagation(); 
      }); 
     }); 
    } 
}); 

и полное решение:

$("#list").sortable({ 
    stop: function() { 
    // enable text select on inputs 
    $("#list").find("input").preventDisableSelection(); 
    } 
}).disableSelection(); 

// enable text select on inputs 
$("#list").find("input").preventDisableSelection(); 
+0

Это работает только в IE? Я пробовал в FF, но не повезло. – c0deNinja

+0

Это работает везде, так как jQuery является кроссплатформенным :) Что именно не работает? –

+1

Ввод текста невозможен. – c0deNinja

0

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

function disableSelection(o) { 
    var $o = $(o); 
    if ($o.find('input,select').length) { 
    $o.children(':not(input,select)').each(function(x,e) {disableSelection(e);}); 
    } else { 
    $o.disableSelection(); 
    } 
} 
disableSelection(document); 

Но обратите внимание, что .disableSelection устарела by jquery-ui и когда-нибудь уйдет.

0

EASY! просто сделать:

$("#sortable_container_id input").click(function() { $(this).focus(); }); 

и заменить «sortable_container_id» с идентификатором элемента, который является контейнером всех «отсортированных» элементов.

+0

Этот вопрос из 2010. Ответы здесь очень маловероятны для чтения. – Andreas

Смежные вопросы