2014-10-02 55 views
2

我有這個整潔的腳本來處理,當用戶將點擊從一個複選框移到另一個複選框來選擇倍數。Shift點擊引導程序/ FlatUI複選框

var last_clicked = null; 
$("table.multi-select").on("click", "input:checkbox", function (e) { 
    // allow shift clicking 
    var grid = $(this).parents("table"); 

    if (!last_clicked) 
     last_clicked = this; 

    if (event.shiftKey) { 
     var start = grid.find("tbody input:checkbox").index(this); 
     var end = grid.find("tbody input:checkbox").index(last_clicked); 
     for (i = Math.min(start, end) ; i <= Math.max(start, end) ; i++) { 
      grid.find("tbody input:checkbox")[i].checked = last_clicked.checked; 
     } 
    } 

    last_clicked = this; 
}); 

它運作良好。我現在將我的複選框替換爲帶風格的引導程序/ FlatUI。這些隱藏了實際的複選框並將其替換爲樣式標籤。我已經修改了我的移位點擊腳本

$("table.multi-select").on("click", "label.checkbox", function (e) { 
    // allow shift clicking 
    var grid = $(this).parents("table"); 

    if (!last_clicked) 
     last_clicked = this; 

    if (event.shiftKey) { 
     var start = grid.find("tbody label.checkbox").index(this); 
     var end = grid.find("tbody label.checkbox").index(last_clicked); 
     // find checked state of last clicked 
     var checked_last = $(last_clicked).hasClass("checked"); 
     for (i = Math.min(start, end) ; i <= Math.max(start, end) ; i++) { 
      // don't check 'this', because flatUI will toggle it when we're done 
      if(i != start) 
       $(grid.find("tbody label.checkbox input:checkbox")[i]).checkbox(checked_last ? "check" : "uncheck"); 
     }    
    } 

    last_clicked = this; 
}); 

這也適用。問題是,它也會選中複選框之間的頁面上的所有文本!我如何阻止這種情況發生?

+0

除非我們看到一個實際的例子,很難說。但你可以嘗試[取消選擇文本](http://stackoverflow.com/questions/6186844/clear-a-selection-in-firefox/6187098#6187098)? – mccannf 2014-10-02 16:09:46

+0

@ mccannf,這是做的伎倆。發佈這個答案,我會接受它! – roryok 2014-10-02 18:11:32

回答