2016-03-01 74 views
0

感謝大家!現在問題解決了,最終小提琴這裏https://jsfiddle.net/q0o11c5e/23/jQuery Multi-Select Listbox其中'None'選項取消選擇所有其他

我有一個多選列表框與下列要求「無」:在選擇

  1. 選擇「無」包括隨時隨地 =>只'沒有' 被選中(其他任何被關閉)
  2. 取消選擇任何其他項目 與Ctrl +點擊,如果沒有其他選擇,將自動 選擇'無'。

這是用jQuery的Change函數實現的。我的問題:

1)首先,對於#2(全Ctrl +單擊取消選擇):流程根本不會進入$("#listbox").change(function()。您可以看到,因爲如果選擇'A',然後使用Ctrl +單擊取消選擇,則不會顯示該函數頂部的警報。 2)對於#1,如果選擇包括'None'(值'')任何地方,我創建一個空白數組,將''推到它,並設置列表框Val(立即中斷),但這是行不通的。

$("#listbox").change(function() { 

    alert('SelArray: ' + $('#listbox').val() + ' Length: ' + $('#listbox').val().length); 

    // If no selection, automatically select 'None' 
    if ($('#listbox').val().length == 0) { 
     alert('Nothing selected'); 
    } 
    else 
    { 
    // If new selection includes empty ('None'), deselect any other active selections 
    $.each($('#listbox').val(), function (index, value) { 
     if (value == '') { 
      alert('None selected, clearing anything else..'); 
      var noneOnly = {}; 
      noneOnly.push(''); 
      $('#listbox').val(noneOnly); 
      return false; 
     } 
    }); 

    } 


}); 
+1

只是一個小問題,與你的問題無關,但對我來說,選擇「全部」將意味着所有的選項應該被選中,我會如果選擇「全部」視覺選擇「無」,將會感到困惑。更有甚者,如果*取消選擇所有選項,然後自動選擇「全部」,則感覺您所描述的UI與直覺相反。 –

+0

沒錯,我現在將它重新命名。 –

+1

在取消選擇的代碼中看起來像'noneOnly'實際上是一個對象:'{}'。如果您將其更改爲'[]',則取消選擇應該更好。 –

回答

1

如果我正確地得到了這個意圖,像下面的東西?

$("#listbox").change(function() { 
    var arr= $(this).val(); 
    if (arr == null || arr.length === 0 || (arr.length > 1 && arr[0] === '')) 
     $(this).val(['']); 
}); 

這僅僅設置每當沒有值被選擇的選擇或如果選擇了多個值,包括「無」

Fiddle

1
$("#listbox").on("input change", function() { 
    if($(this).find("option[value='']:selected").length!=0 || $(this).find("option:selected").length==0) { 
    $(this).find("option").attr("selected", false); 
    $(this).find("option[value='']").attr("selected", true); 
    return false; 
    } 
}); 

喜,檢查我的上述代碼段,這是我的嘗試https://jsfiddle.net/q0o11c5e/22/

相關問題