2010-10-04 38 views
10

Tôi gọi hàm javascript tự động tạo <li> với hộp nhập văn bản và thả xuống bên trong. Trình đơn thả xuống hoạt động tốt với Draggable của jQuery nhưng tôi không thể chỉnh sửa hộp văn bản đầu vào?Hộp văn bản đầu vào không thể chỉnh sửa được với 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(); 
      }); 
} 

Tôi đã phát xung quanh với tùy chọn hủy nhưng không hiệu quả.

Bạn đề xuất điều gì?

+0

trình duyệt nào bạn đang sử dụng? Nó hoạt động tốt cho tôi trong Chrome + Firefox. Nó có thể là một vấn đề z-index một nơi nào đó trong css của bạn, nơi bạn có một div vô hình mở rộng trên hộp đầu vào và ngăn cản bạn bấm vào nó. Chỉnh sửa: Ah, tôi thấy bạn có thể, tuy nhiên, không chọn văn bản trong hộp đầu vào, hoặc nhận được carot để đi bất cứ nơi nào nhưng lá thư cuối cùng - Tôi giả định đó là những gì bạn có nghĩa là bởi câu hỏi của bạn. –

+1

Xóa dòng disableSelection() khắc phục sự cố và mọi thứ vẫn hoạt động tốt (trong FF & Chrome). Nếu không, bạn có thể lựa chọn không cho câu trả lời của Pointy. –

Trả lời

16

Tôi nghĩ rằng vấn đề là khi bạn sử dụng .disableSelection() cho các yếu tố <li>. Thay vì làm điều đó, đặt văn bản (thứ bên ngoài <input> của bạn) vào <span> yếu tố, và sau đó vô hiệu hóa các nhịp

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

Hãy thử điều này:

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

Nó làm việc cho tôi.

+0

Ngay cả đối với tôi disableSelection() không hoạt động nhưng tập trung đầu vào hoạt động như một nét duyên dáng! – Redips77

+0

Một giải pháp thực tế hơn có thể là sử dụng ** hủy ** thiết lập của widget có thể sắp xếp như người dùng yêu cầu đã làm, có thể anh ta đã làm nó sai (tôi đã không nghiên cứu vấn đề và mã của anh ấy) ... (?) – Redips77

+0

@ Redips77 Tôi đã sử dụng hủy trong các tùy chọn của mình và không bao giờ làm việc. Buộc tập trung vào đầu vào khi nhấp chuột là giải pháp cho tôi. +1 – RaphBlanchet

0

Đó là tốt cho tôi:

 

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

original answer

Các vấn đề liên quan