2010-10-26 15 views
8

Beispiel: Ich habe eine ungeordnete Liste mit einer Reihe von Formulareingaben.jqueryUI Sortierbar: Handhabung .disableSelection() auf Formulareingaben

Nachdem ich die ul .sortable() erstellt habe, rufe ich .disableSelection() auf der sortierbaren (ul) auf, um die Textauswahl beim Ziehen eines li-Elements zu verhindern.

..alle in Ordnung, aber ich brauche/neu Text-Auswahl an den Formulareingaben ermöglichen .. oder die Form ist im Grunde nicht bearbeitet ..

fand ich eine Teillösung @http://forum.jquery.com/topic/jquery-ui-sortable-disableselection-firefox-issue-with-inputs

keine Gedanken?

+0

Wenn du deinen Code posten könntest, könnte ich wahrscheinlich das schaffen ... hast du die 'cancel' Option von sortierbar angesehen? Ziehen Sie in Betracht, ein JSFiddle zu erstellen, das es erklärt. (www.jsfiddle.net) – Fosco

+0

@ Fosco. Danke. war in letzter Zeit ein wenig beschäftigt. Ich habe gerade einen Hack gepostet, der dies löst. – zack

+1

Als eine Bemerkung betrifft es nicht nur 'Eingänge', sondern 'wählt' auch. – polkduran

Antwort

22

gelöst. bisschen hack aber funktioniert! .. irgendwelche Kommentare, wie kann ich das besser machen?

gelten .sortable() und dann Text-Auswahl an Eingabefelder aktivieren:


$("#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

ich hatte das gleiche Problem. Die Lösung ist ganz einfach:

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

Ich sehe keine jQuery-Dokumentation für 'enableSelect()' .. Bitte korrigieren Sie mich, wenn ich falsch liege, aber ich glaube nicht, dass es existiert! – zack

+0

@zack es war wahrscheinlich ein Tippfehler. Fest. – ArtBIT

+1

Der korrekte Name ist enableSelection(). Siehe http://api.jqueryui.com/enableSelection/ –

3

jQuery UI 1,9

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

Selektor = Eingang, Tisch, li ....

+0

klingt großartig! Ist das dokumentiert, hast du einen Link? oder ein jsFiddle? ..nicht, dass ich skeptisch bin – zack

4

Eine kleine Verbesserung von Post von Zack - jQuery Plugin

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

Und voll Lösung:

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

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

Das funktioniert nur in IE? Ich habe es in FF versucht, aber kein Glück. – c0deNinja

+0

Das funktioniert überall seit jQuery ist plattformübergreifend :) Was genau funktioniert nicht? –

+1

Texteingabe ist nicht wählbar. – c0deNinja

0

Im Folgenden wird Auswahl für das gesamte Dokument deaktivieren, aber Eingang und wählen Sie Elemente werden noch funktionsfähig sein ...

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); 

Aber beachten Sie, dass .disableSelection veraltet ist von jquery-ui und wird eines Tages verschwinden.

0

EINFACH! gerade tun:

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

und „sortable_container_id“ mit der ID des Elements ersetzen, dass der Behälter aller „sortierbar“ Elemente ist.

+0

Diese Frage ist von 2010. Antworten hier sind sehr unwahrscheinlich, gelesen zu werden. – Andreas

Verwandte Themen