几个问题我很难搞清楚。我有一个下拉菜单和一个按钮,将所选选项添加到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