-1

我在 jQuery 中有以下脚本:

var cval5 = ' ';
$(':input[value^="ltrDataColumn"]').filter(':checked').each(function (index) {
    var val = (this).value;
    val = val.replace('ltrDataColumn', '');
    cval5 = cval5 + val + '@@';
});

HTML:

<select multiple="multiple" style="width:370px">
    <option value="ltrDataColumnred">Red</option>
    <option value="ltrDataColumngreen">Green</option>
    <option value="ltrDataColumnblue">Blue</option>
    <option value="ltrDataColumnorange">Orange</option>
    <option value="ltrDataColumnpurple">Purple</option>
    <option value="ltrDataColumnyellow">Yellow</option>
    <option value="ltrDataColumnbrown">Brown</option>
    <option value="ltrDataColumnblack">Black</option>
</select>

在上面的列表中,我只选择了黄色,但结果显示yellow@@yellow@@而不是yellow@@.

它增加了两次价值。我尝试了很多,但我无法复制它为什么每个值加两次。

4

3 回答 3

2

由于它是一个select元素,因此您需要使用 :selected 过滤器而不是 :checked

$('select option[value^="ltrDataColumn"]:selected').each(function (index) {
    var val = this.value;
    val = val.replace('ltrDataColumn', '');
    cval5 = cval5 + val + '@@';
});

演示:小提琴

另一种看待这个的方式是

var cval5 = $('select option[value^="ltrDataColumn"]:selected').map(function(){
    return this.value.replace('ltrDataColumn', '');
}).get().join('@@');

演示:小提琴

于 2013-09-16T09:54:47.263 回答
0

您正在使用选择元素。因此,您的脚本应如下所示:

var cval5 = ' ';
var select = $("select[multiple='multiple']");
var value = select.val();
if(value != null) {
    for(var i=0; val=value[i]; i++) {
        val = val.replace('ltrDataColumn', '');
        cval5 = cval5 + val + '@@';
    }
}
alert(cval5);

演示http://jsfiddle.net/krasimir/PYpFy/4/

于 2013-09-16T09:58:38.083 回答
0

在这里演示

首先,你混淆了checkedselected你没有使用好的选择器,看看控制台看看输出,试试这个:

HTML:

<select multiple="multiple" style="width:370px">
    <option value="ltrDataColumnred" selected>Red</option>
    <option value="ltrDataColumngreen" selected>Green</option>
    <option value="ltrDataColumnblue">Blue</option>
    <option value="ltrDataColumnorange" selected>Orange</option>
    <option value="ltrDataColumnpurple">Purple</option>
    <option value="ltrDataColumnyellow">Yellow</option>
    <option value="ltrDataColumnbrown">Brown</option>
    <option value="ltrDataColumnblack">Black</option>
 </select>

JS:

var cval5 = ' ';
$('option[value^="ltrDataColumn"]:selected').each(function (index) {
      var val = (this).value;
      val = val.replace('ltrDataColumn', '');
      cval5 = cval5 + val + '@@';
      console.log(cval5);
  });

输出

 red@@
 red@@green@@
 red@@green@@orange@@ 
于 2013-09-16T10:06:17.143 回答