2011-09-27 50 views
0

我想从使用javascript的复选框中获取值。 我只想将一个复选框的值传递给javascript函数,如果选择了多个,则会出现一个警告框,通知只能检查一个框。
我已经试过这样:从仅选中的复选框中获取值

var publish_trigger = document.querySelector("#publish_trigger"); 
publish_trigger.onclick = function() { 
    var _posts = document.getElementsByName('post_id[]'); 
    var check = _posts.checked; 
    var boxes = _posts.length; 
    var txt = ""; 
    if(check.length > 1) { 
    alert("Only one at a time"); 
    } else { 
    for (i = 0; i < boxes; i++) { 
     if (_posts[i].checked) { 
     txt = txt + _posts[i].value + " " 
     } 
    } 
    } 
    alert(txt); 
    return false; 
} 
+4

您是否考虑过使用单选按钮? –

+0

@DanielBrockman它在数据网格表上使用时,复选框还可用作识别删除和其他功能的帖子的手段 – MrFoh

回答

0

这段代码是错误的:

var _posts = document.getElementsByName('post_id[]'); 
var check = _posts.checked; 

getElementsByName()返回元素的NodeList(有效数组),那么您的变量_posts没有checked属性。您需要循环访问_posts以统计_posts内各个元素的检查属性。

你已经有一个for循环,以便在里面添加验证:

var count = 0; 
for (var i = 0; i < boxes; i++) { 
    if (_posts[i].checked) { 
     if (++count > 1) { 
     alert("Only one checkbox may be checked at a time."); 
     return false; 
     } 
     // I don't know what you're trying to do with the following line 
     // but I've left it in. 
     txt = txt + _posts[i].value + " " 
    } 
} 

(注:无关你的问题,您应该在函数内声明循环计数器i否则将是全球性的,并可能导致如果您在其他地方也使用它,则难以调试问题。)

+0

工作得很好 – MrFoh