0

我正在创建一个显示连锁酒店列表的对话框。我的对话框创建正常

<div id="HotelDialog" class="popup ui-dialog-content ui-widget-content">
 <div class="popup-hotel">
  <div class="checkbox">
   <input id="ChainBR" type="checkbox" name="HotelChainBR" value="BR" checked="checked" onclick="filterChain();">
   <label for="ChainBR">BR Hotel</label>
  </div>
  <div class="checkbox">
   <input id="ChainBW" type="checkbox" name="HotelChainBW" value="BW" checked="checked" onclick="filterChain();">
   <label for="ChainBW">BW Hotel</label>
  </div>
  <div class="checkbox">
   <input id="ChainCI" type="checkbox" name="HotelChainCI" value="CI" checked="checked" onclick="filterChain();">
   <label for="ChainCI">CI Hotel</label>
  </div>
 </div>
</div>

我的最终目标是用户将点击每家酒店,如果他们取消选中该框,则会有一个数据链值等于复选框值的 div 消失。我已经到了每次选中/取消选中复选框值时都尝试将复选框值输出到控制台的地步,但它每次只输出 BR。我在选择器语句中做错了什么?

<script type="application/javascript">
var hotelchains = [['BR'],['BW'],['CI']]; 

function filterChain() {
 for (loopcnt = 0; loopcnt <= (hotelchains.length-1); loopcnt++) {
  var singlechain = $('input[name^="HotelChain"]').val();
  console.log(singlechain);
 };
};
4

2 回答 2

3

那是因为val只返回第一个选定元素的值,并且您在每次迭代中选择相同的元素,您可以使用eqoreach方法:

$('input[name^="HotelChain"]').each(function(){
    var val = this.value;
    console.log(val)
})

或者:

var hotelchains = ['BR','BW','CI']; 
var $input = $('input[name^="HotelChain"]');

function filterChain() {
   for (var i = 0; i < hotelchains.length ; i++) {
      var singlechain = $input.filter('[name="HotelChain'+hotelchains[i]+'"]').val();
      console.log(singlechain);
   };
};
于 2012-10-03T16:39:49.900 回答
1
$('input[name^="HotelChain"]').val();

这只会输出选择器找到的第一个值..

这就是你总是看到BR的原因

还要检查你的数组..它应该像

var hotelchains = ['BR','BW','CI'];

尝试这个

var hotelchains = ['BR','BW','CI']; 

function filterChain() {
 for (loopcnt = 0; loopcnt <= (hotelchains.length-1); loopcnt++) {
  var singlechain = $('input[name="HotelChain' + hotelchains[loopcnt] + '"]').val();
  console.log(singlechain);
 };​
于 2012-10-03T16:38:11.437 回答