2010-10-04 8 views
10

Wywołuje funkcję javascript, która dynamicznie buduje <li> za pomocą pola wprowadzania tekstu i rozwijana w środku. Upuszczanie działa dobrze z funkcją przeciągania jQuery, ale nie mogę edytować pola tekstowego wejściowego?Nie można edytować pola tekstowego tekstu za pomocą narzędzia jQuery Draggable?

function addField(type){ 
    var html = ''; 
    html += '<li class="ui-state-default">'; 
    if(type == 'text'){ 
    html += '<b>Text Field</b><br />'; 
    html += 'Field Name: <input type="text" name="text" id="text">&nbsp;&nbsp;&nbsp;'; 
    html += 'Field Size: <select name="textSize" id="textSize' + fRank + '"><option value="small">Small</option><option selected value="medium">Medium</option><option value="large">Large</option><option value="large2">Large 2 Lines</option><option value="large3">Large 3 Lines</option><option value="large4">Large 4 Lines</option></select>'; 
    } 
    html += '</li>'; 
    $("#sortableFields").append(html); 

    $(function() { 
     $("#sortableFields").sortable({ 
     revert: true 
    }); 
    $("#draggable").draggable({ 
      connectToSortable: "#sortableFields", 
    helper: "clone", 
    revert: "invalid", 
    cancel: ':input,option' 
    }); 
    $("ul, li").disableSelection(); 
      }); 
} 

Grałem z opcją anulowania, ale to nie pomaga.

Co sugerujesz?

+0

Jakiej przeglądarki używasz? Działa to dobrze dla mnie w Chrome + Firefox. Może to być problem z z-index gdzieś w twoim css, gdzie masz niewidoczny div rozciągający się nad polem wprowadzania i uniemożliwiający ci kliknięcie. Edycja: Ach, widzę, że nie możesz jednak zaznaczać tekstu w polu wejściowym, albo kazać masie przejść wszędzie, tylko ostatnią literą - zakładam, że masz na myśli to pytanie. –

+1

Usunięcie linii disableSelection() rozwiązuje problem, a wszystko nadal działa poprawnie (w FF i Chrome). W przeciwnym razie możesz wybrać odpowiedź Pointy. –

Odpowiedz

16

Myślę, że problem polega na używaniu elementów .disableSelection() dla elementów <li>. Zamiast robić to, umieścić tekst (rzeczy poza <input>) do <span> elementów, a następnie wyłączyć przęseł

$('li > span').disableSelection(); 
2

Spróbuj tego:

$('li.ui-state-default').on('click', 'input', function() {  
    $(this).focus(); 
}); 

to działa na mnie.

+0

Nawet dla mnie disableSelection() nie działało, ale skupienie danych działało jak czar! – Redips77

+0

Bardziej praktycznym rozwiązaniem może być użycie ustawienia ** anuluj ** z sortownym widżetem, jak już zrobił to pytający użytkownik, może zrobił to w niewłaściwy sposób (nie badałem jego problemu i kodu) ... (?) – Redips77

+0

@ Redips77 Używałem również anulowania w moich opcjach i nigdy nie pracowałem. Zmuszenie do skupienia się na danych wejściowych, gdy kliknięcie było dla mnie rozwiązaniem. +1 – RaphBlanchet

0

To było dobre dla mnie:

 

    $('input').bind('click.sortable mousedown.sortable',function(ev){ 
     ev.target.focus(); 
    }); 

original answer

Powiązane problemy