2010-10-26 91 views
8

示例:我有一個包含一堆表單輸入的無序列表。在調用ul .sortable()之後,我調用sortable(ul)上的.disableSelection()以防止在拖動li項目時進行文本選擇。jqueryUI可排序:處理表單輸入中的.disableSelection()

..所有細,但我需要重新/啓用的形式輸入文本選擇..或形式是基本上不可編輯..

我發現了一個部分解決方案@http://forum.jquery.com/topic/jquery-ui-sortable-disableselection-firefox-issue-with-inputs

有什麼想法嗎?

+0

如果你可以發佈你的代碼,我可以做這個工作......你看過可以排序的'cancel'選項嗎?考慮製作一個解釋它的JSFiddle。 (www.jsfiddle.net) – Fosco 2010-10-26 19:17:16

+0

@ Fosco。 THKS。最近有點忙..我剛剛發佈了一個解決此問題的黑客.. – zack 2010-11-15 19:24:40

+1

作爲一個評論,它不僅影響'輸入',而且'選擇'。 – polkduran 2013-06-07 13:34:54

回答

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

我沒有看到'enableSelect()'的jQuery文檔..請糾正我,如果我錯了,但我不相信它存在! – zack 2011-11-18 17:50:24

+0

@zack它可能是一個錯字。固定。 – ArtBIT 2012-01-20 05:23:43

+1

正確的名稱是enableSelection()。看到http://api.jqueryui.com/enableSelection/ – 2015-02-13 11:24:35

3

jQuery UI的1.9

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

選擇 =輸入,表,裏....

+0

聽起來不錯!這是記錄,你有鏈接?或一個jsFiddle? ..不是說我很懷疑 – zack 2012-10-18 19:58:35

4

從扎克的後稍加改進 - 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 2013-02-02 20:31:03

+0

因爲jQuery是跨平臺的,所以可以在任何地方使用:) 究竟哪些方法無效? – 2013-02-12 05:14:12

+1

文本輸入不可選。 – c0deNinja 2013-02-12 05:28:08

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已棄用通過jquery-ui,並且有一天會消失。

0

容易!只是做:

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

,並與這是所有「排序」元素的容器元素的ID替換「sortable_container_id」。

+0

這個問題來自2010年。這裏的答案不太可能被讀取。 – Andreas 2014-10-28 20:57:07