幾個問題我很難搞清楚。我有一個下拉菜單和一個按鈕,將所選選項添加到multiple select
控件。我遇到的第一個問題是,當multiple select
有多個選項並且您嘗試添加的內容已經存在時,存在一個選項已存在的提示,但存在多個選項。要重現我想解釋的內容,請按照下列步驟操作:問題添加項目以選擇已存在的項目
這是一個jsFiddle,它顯示了該問題。
- 從下拉框中選擇一個選項
- 單擊添加
- 從下拉菜單中選擇不同的選項
- 單擊Add(現在應該在多種選擇控制兩個選項)
- 單擊Add (嘗試添加您在步驟4中添加的相同選項)
問題1:應在第5步中發生警報被觸發兩次。
我假設發生這種情況是因爲警報在.each()
方法中,因此導致它針對每個現有選項被觸發。
通過添加導致第二個問題的下拉列表中的第三個選項,您可以更進一步。在添加第三個選項後,即使此時它在multiple select
控件中不存在,也會觸發選項已存在的警報。然後,您可以嘗試添加三個選項中的任何一個,並且由於所有三個選項都會存在,警報將被觸發三次。下面是重現此步驟:
- 執行步驟1-4以上
- 所列從下拉框中選擇(即尚未被添加的一個)
- 單擊添加第三個選項(問題應當您單擊添加,即使該選項不會在那個時候存在,警惕火災:在這裏發生)
第2期。
問:什麼我需要在multiple select
控制無論多少選擇存在改變使(問題1)您只警告一次,(第2期)時,因爲第三個選項被添加不驚動它在添加時不存在?
這裏是添加的選項代碼:
if ($('#lbl1').html() != "") {
if ($('#select2 > option').length == 0) {
$('<option>').text(txt).prependTo('#select2')
.val(txt).prependTo('#select2');
$('#select2').trigger('change')
.find('option').prop('selected', true);
} else if ($('#select2 > option').length >= 1) {
$('#select2 > option').each(function() {
if ($('#select2 > option').val() != $('#lbl1').html()) {
$('<option>').text(txt).prependTo('#select2')
.val(txt).prependTo('#select2');
$('#select2').trigger('change')
.find('option').prop('selected', true);
} else {
alert('Option already exists.');
return;
}
});
}
}
我還應該注意到另外一個角度我想在移動if
語句內.each()
方法,但遇到了與問題爲好。當我嘗試這種方式時,第一個問題不會發生,但是當您添加第三個選項時,它會被添加兩次。
這是一個jsFiddle顯示此嘗試。要重現,請添加全部三個選項。當添加第三個選項時,您應該看到它被添加了兩次。
這裏是代碼:
if ($('#lbl1').html() != "") {
if ($('#select2 > option').length == 0) {
$('<option>').text(txt).prependTo('#select2')
.val(txt).prependTo('#select2');
$('#select2').trigger('change')
.find('option').prop('selected', true);
} else if ($('#select2 > option').length >= 1) {
if ($('#select2 > option').val() != $('#lbl1').html()) {
// Difference is here: moved method inside 'if' statement
$('#select2 > option').each(function() {
$('<option>').text(txt).prependTo('#select2')
.val(txt).prependTo('#select2');
$('#select2').trigger('change')
.find('option').prop('selected', true);
});
} else {
alert('Option already exists.');
return;
}
}
}
@Rooster我想過包括在問題以及因爲我想知道是否有降低它的方式。雖然我遇到了第二個問題,但我認爲在一個問題中提問太多了。在代碼中,它選擇了添加的選項,所以如果你拿掉了那部分,它會減少一些,但我仍然認爲,如你所說,這是很多,我應該能夠減少它。 – Brian
只是爲了簡化事情(noot)我只注意到另一個問題。按照前5個步驟,在警示顯示2次後嘗試添加已存在的第一個選項。該選項被添加並顯示警報。在第二小提琴沒有提示只顯示了很多選擇,存在的那個,得到補充。 – melc
@melc我沒有明白,謝謝你的注意。 – Brian