选择多个<option>跟踪所选元素</option>

时间:2013-06-11 14:43:59

标签: jquery tags

在这里几天后,我感觉自己走错了路 尝试使用<select>来跟踪多个客户选择。

<div id="ajax">
<select id="select_site" name="site" multiple>
    <option value="" selected>checked</option>
    <option value="" selected>checked</option>
    <option value="">unchecked</option>
    <option value="">unchecked</option>
</select>
<button id="continue" type="button">Save</button>
</div>  

期望的结果:
点击勾选警报('减去已检查')
点击未选中的提醒('添加到已选中')

$('#ajax').on('click', '#select_site option', function () {
  var checked = $('#select_site option:selected');
  if ($(this).prop('selected') == 'selected') {
    alert('subtract from checked');
  } else {
    alert('add to checked');
  }
  $('#select_site').empty();
  $.each(checked, function (i, v) {
    $('#select_site').append(v);
  });
  });  

$('#ajax').on('click', '#continue', function () {
  var checked = $('#select_site option:selected');
  alert(checked);
});  

jsFiddle

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您的脚本中存在一些错误。

1:它不会在鼠标点击上,而是在mousedown上,因此您可以提供默认行为。

2:正如我所说,你需要防止默认行为,所以你确定了这个:

pseudo-on(function(e){
    e.preventDefault()
    //Your code
})

3:使用.prop()返回一个布尔值,所以此刻,你的条件总是假的。您的情况可以简单地为if ($(this).prop('selected'))

4:由于阻止了默认行为,您需要手动添加或删除所选选项。

5:因为您手动选择选项,所以必须声明var checked

6:我不知道你对附加.each()循环的意图是什么,但我不认为你的解决方案需要它。在这种情况下,var checked也将毫无用处。

这是一个工作小提琴:http://jsfiddle.net/akshC/1/