2014-04-18 142 views
1

標題幾乎說明了一切。如何選擇jQuery中的所有選項選擇多選AFTER搜索過濾?

我在頁面上有幾個選擇框,所有這些都是在ASP.NET webform中動態生成的,其中一些選項有數百個選項。我希望能夠輸入搜索字符串,然後選擇所有匹配的條目。

很容易選擇全部並取消選擇所有在底部選擇控件上使用JavaScript,然後調用$('#control-id').trigger('chosen:update');,但在嘗試僅選擇與搜索過濾器匹配的選項時遇到問題。

我不挑剔如何做到這一點,無論是「全選」選項,一個額外的按鈕,或按鍵。這是針對後端開發專用頁面的,因此用戶界面不一定非常直觀。

回答

2

我結束了通過改變所選擇的插件,並添加以下代碼AbstractChosen.prototype.keyup_checker解決這個:

case 65: 
    if (evt.ctrlKey && this.results_showing) { 
    if (typeof onSelectAll == 'function') { 
     onSelectAll($(this.container).attr('id'), $(this.form_field).attr('id')); 
     this.results_hide(); 
    } 
    return true; 
} 

基本上,如果按Ctrl-A中,而選上的選擇是開放的,它會調用一個用戶定義的委託onSelectAll與選定的容器的id和底層select的id作爲參數。如果沒有按下Ctrl鍵,我希望這會回落到默認值,這允許搜索字符串輸入像平常一樣工作。

回到我的網頁上,我有以下:

function onSelectAll(containerId, selectId) { 
    var ids = []; 
    $("#" + containerId).find('.active-result').each(function() { ids.push(parseInt($(this).attr('data-option-array-index'))); }); 
    $(ids).each(function() { $($('#' + selectId + ' option')[this]).attr('selected', 'selected'); }); 
    $('#' + selectId).trigger('chosen:updated'); 
} 

這得到在選擇的容器中可見結果的數組索引,如在基礎選擇控制選擇標記它們,然後促使已選擇容器更新。

我知道改變一個標準鍵盤快捷鍵的含義並不完全是可以理解的,但在其他三個最有可能使用這個東西的開發者的非正式調查中,他們都提出了這個問題,所以我認爲我是目前已明確。這就是說,改進和清理我的JavaScript的建議非常受歡迎 - 我一直在做後端和SQL的東西這麼長時間,我完全失去了我的UI截圖。

相關問題