2016-11-19 57 views
1

我试图从不同选择标记中使用jQuery获取相同名称的值。jQuery:从具有相同名称的不同选择标记中获取值

以下是HTML

<div class="row">  
    <div class="col-md-3"> 
    <h1><i class="fa fa-glass" aria-hidden="true"></i></h1> 
    <select class="form-control SelectWine" id="SelectWine" name="SelectWine[]"> 
     <option value="1">Red</option> <option value="2">Green</option> <option value="3">White</option>            </select> 
    </div> 
    <div class="col-md-3"> 
    <h1><i class="fa fa-glass" aria-hidden="true"></i></h1> 
    <select class="form-control SelectWine" id="SelectWine" name="SelectWine[]"> 
     <option value="1">Red</option> <option value="2">Green</option> <option value="3">White</option>            </select> 
    </div> 

</div> 

以下是我怎么了访问jQuery中:

$('.SelectWine').each(function (index){ 
     var wineId=[]; 
     wineId.push($(this).val()); 
     console.log('Wid',wineId[0]); 
     console.log('Wid',wineId[1]); 
     console.log('Wid',wineId[2]); 
    }); 

我越来越控制台日志如下

Wid 1 
Wid undefined 
Wid undefined 
Wid 3 
Wid undefined 
Wid undefined 

我每次都在猜测它的价值。但我需要将每个选择标记的值存储到一个数组中。

注意:第一个选择标记是在默认(索引1)和第二个我选择第三个选项(索引3)。

此代码是为了获取用户对2或3种不同产品的输入并将其存储到cookie中以供进一步使用,但首先我需要将它作为数组存储,然后我可以将其存储为cookie中的json数组。

我试图通过元素的名称访问,但它只响应使用id的访问。

我想了几个小时,想不出办法。你的帮助将会很棒!

+0

夫妇的事情。首先,'wineId'是each()中的一个变量。这意味着它将在每次迭代中被创建和销毁。如果你想让它坚持下去,把它移到每一个之外。其次,更多的侧面说明,你的选择元素都有相同的ID。 Id不能在单个页面上重复。他们是独特的ID。第三,只需使用'this.value'。你不必做$(this)。val()如果你所有后面的是选择的值。 – Taplar

+1

首先,使用不同的名称和ID,并通过循环遍历不同的选择来创建一个数组。 – junkfoodjunkie

回答

3

您需要声明外循环数组中的JavaScript调用,否则要创建在每个迭代一个新的数组并且由于范围而无法访问each回调。

var wineId=[]; 
$('.SelectWine').each(function (index){ 
     //now each iteration will push to same array 
     .... 

当你需要生成一个这样的数组,你可以使用map()

var windeId = $('.SelectWine').map(function(){ 
    return this.value; 
}).get(); 
+0

嘿,打我到帖子。 – Taplar

+0

这是我的愚蠢,我没有想到这一点。 它现在正在完善 – Kuru

+0

有时它只是学习曲线的一部分 – charlietfl

0

有IDS不同,使用$('#id_name')在JavaScript调用或具有类名相同,并使用$('.class_name')

+0

Op正在使用相同的类名称 – charlietfl

1

的主要问题是,你声明内为每个阵列,因此被覆盖掉了。在循环外声明它。

此外,无关你的问题:

  • 你选择的元素具有相同的名称和编号。他们可以并且应该共享一个类名称,但不能使用元素名称和ID。
  • 您可以使用'this.value'而不是'$(this).val()'。尽可能避免不必要的jQuery使用会提高性能。

https://jsfiddle.net/1ok6ymgf/

var wineId=[]; 
$('.SelectWine').each(function (index) {  
    wineId.push(this.value); 
    console.log('Wid',wineId[0]); 
    console.log('Wid',wineId[1]); 
    console.log('Wid',wineId[2]); 
}); 
相关问题