2017-04-06 28 views
0

我有一个复选框具有相同的名称和编号,但不同的值。 我试图获取值,当我点击复选框,以将它传递给ajax请求。什么都我尝试,我得到了相同的结果,它只是在列表中返回的第一个值(它实际上是一个PHP环路)从循环中的复选框jquery值不张贴

function checkCheckboxState() { 

    if ($('.displayme').is(':checked')) { 

    //tried all of these... 

    //var id = $('.displayme').first().attr("value"); 
    //var id = $('.displayme').val(); 
    //var id = $(this).val(); 
     alert(id); 

    } 

     var id = $(":checkbox[name='displayme']:checked").val(); 
} 
<input type="checkbox" name="displayme" value="27" id="displayme" class="displayme" onclick="checkCheckboxState()"> 
<input type="checkbox" name="displayme" value="28" id="displayme" class="displayme" onclick="checkCheckboxState()"> 
<input type="checkbox" name="displayme" value="29" id="displayme" class="displayme" onclick="checkCheckboxState()"> 
+1

'我有一个复选框与相同的... ID'这是一个问题它自。 'id'属性必须是唯一的。此外,如果您在提交表单时创建所选复选框值的数组,则逻辑将更有意义。 –

+0

不建议使用多个相同ID的ID。 – npst

+0

相同ID是坏IDea ^^ - >这可能对玩游戏很有用与:var id = $(“input:checkbox:checked”)。map(function(){return $(this).attr(“id”);})。get(); – OldPadawan

回答

0

你不应该有相同的ID多次使用的同一页。

您可以在复选框的变化的事件绑定,然后用此获得的价值:

$("checkbox.displayme").on("change",function(){ 
    var checker = $(this).is(':checked'); 
    //your ajax code here 
}); 

如果您的复选框是在一个PHP循环产生的,您可以使用循环的索引生成不同的id(但上面的代码不需要任何id)。

+0

'$(this).val($(this).is(':checked'))'? –

+0

谢谢!那是一个错误。 –

0

你的第一个问题是你有多个相同的元素id。他们需要是独一无二的。在这种情况下,你甚至可以删除它们,因为你有公共类名来标识元素。

要解决您的实际问题,您需要获取对事件处理程序中单击的复选框的引用。由于您已经在使用jQuery,因此您可以使用change事件处理程序来完成此操作。尝试:

$(function() { 
 
    $('.displayme').change(function() { 
 
    if (this.checked) 
 
     console.log(this.value); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="checkbox" name="displayme" value="27" class="displayme"> 
 
<input type="checkbox" name="displayme" value="28" class="displayme"> 
 
<input type="checkbox" name="displayme" value="29" class="displayme">

或者您可以使用map()构建所有随后可以在一个单一的AJAX请求传递所选择的复选框的数组:

$(function() { 
 
    $('.displayme').change(function() { 
 
    var values = $('.displayme:checked').map(function() { 
 
     return this.value; 
 
    }).get() 
 
    console.log(values); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="checkbox" name="displayme" value="27" class="displayme"> 
 
<input type="checkbox" name="displayme" value="28" class="displayme"> 
 
<input type="checkbox" name="displayme" value="29" class="displayme">