Php 仅选择Javascript中的一些复选框

Php 仅选择Javascript中的一些复选框,php,javascript,html,forms,Php,Javascript,Html,Forms,我已经有了这个代码: function chkcontrol(j) { var total=0; for(var i=0; i < document.contactForm.qualities.length; i++) { if(document.contactForm.qualities[i].checked) { total =total +1;} if(total > 2) {

我已经有了这个代码:

function chkcontrol(j) {
    var total=0;
    for(var i=0; i < document.contactForm.qualities.length; i++) {
        if(document.contactForm.qualities[i].checked) {
            total =total +1;}
            if(total > 2) {
                alert("Please Select only 2")
                document.contactForm.qualities[j].checked = false ;
                return false;
             }
        }
    }
}

一个选项是使用此选项:

function chkcontrol(j) {
    var total = 0;
    var chk = document.getElementById("newform").querySelectorAll('input[name="qualities[]"]');
    for (var i = 0; i < chk.length; i++) {
        var cur = chk[i];
        if (cur.checked) {
            total++;
            if (total > 2) {
                alert("Too many checked");
                chk[j].checked = false;
                break;
            }
        }
    }
}
功能chkcontrol(j){
var合计=0;
var chk=document.getElementById(“newform”).queryselectoral('input[name=“qualitys[]”)');
对于(变量i=0;i2){
警惕(“检查过多”);
chk[j].选中=假;
打破
}
}
}
}
演示:

另一种方法是使用如下内容,以更好地组织所有内容并保持Javascript不引人注目:

window.onload = function () {
    var chk = document.getElementById("newform").querySelectorAll('input[name="qualities[]"]');
    for (var i = 0; i < chk.length; i++) {
        var cur = chk[i];
        addEvent(cur, "click", clickHandler);
    }
};

function clickHandler(e) {
    var total = 0;
    var chk = document.getElementById("newform").querySelectorAll('input[name="qualities[]"]');
    for (var i = 0; i < chk.length; i++) {
        var cur = chk[i];
        if (cur.checked) {
            total++;
            if (total > 2) {
                alert("Too many checked");
                preventDefault(e);
                break;
            }
        }
    }
}

function preventDefault(e) {
    e = e || window.event;
    if (e.preventDefault) {
        e.preventDefault();
    } else {
        e.returnValue = false;
    }
}

function addEvent(element, eventName, callback) {
    if (element.addEventListener) {
        element.addEventListener(eventName, callback, false);
    } else if (element.attachEvent) {
        element.attachEvent("on" + eventName, callback);
    } else {
        element["on" + eventName] = callback;
    }
}
window.onload=函数(){
var chk=document.getElementById(“newform”).queryselectoral('input[name=“qualitys[]”)');
对于(变量i=0;i2){
警惕(“检查过多”);
防止违约(e);
打破
}
}
}
}
功能默认值(e){
e=e | | window.event;
如果(如默认){
e、 预防默认值();
}否则{
e、 returnValue=false;
}
}
函数addEvent(元素、事件名、回调){
if(element.addEventListener){
元素addEventListener(eventName,回调,false);
}else if(元素附件){
元素attachEvent(“on”+eventName,回调);
}否则{
元素[“on”+eventName]=回调;
}
}
演示:

(其中HTML没有为复选框定义任何
onclick

我更喜欢这种设置,因为您不需要硬编码复选框的索引,可以防止
事件
(而不是手动取消复选框的选中,我认为这样做很好)

参考:


您可以使用
document.contactForm['qualities[]]]
选择带有
name=“qualities[]”
的表单元素列表,您需要方括号表示法来使用对象键和无效标识符

for(var i=0; i < document.contactForm["qualities[]"].length; i++){
for(var i=0;i

这允许将任何有效字符串用作键,而标识符语法将您限制为字母、数字、
$

您可以将HTML添加到问题中吗?Is name=“qualities[]”您试图在HTML中添加的内容?否则,我在js中的任何地方都看不到name=。您的HTML无效;
的唯一有效子元素是
tbody
thead
tfoot
tr
。任何其他内容都必须包装在
td
元素中,以及这些元素中,
tr
的唯一有效子元素。您需要添加结尾
]
,而且可能值得一提的是选择器API的兼容性问题(我认为特别是与IE<8相关的)@DavidThomas是的,我在另一个窗口中测试,发现,谢谢你指出它,感谢穆萨修复它:)@user2267668它在JSFIDLE中对我很好,但我确信我的HTML/Javascript与你实际使用的不匹配。更新你的原始问题,了解你如何使用这个函数和相关的HTML,其他然而,你不能指望事情会在未来发生box@user2267668我刚刚更新了我的答案,修正了一些问题-我的错。谢谢你发布HTML,这样我就可以完成它。它看起来对我有用。哈哈。这不是你的错,是我的错。当你看不到整个范围时,很难理解这个问题。这是我的错。谢谢你花时间和时间帮帮我吧!它很好用。是的,我想这会管用,但它不管用。我也试过了。
for(var i=0; i < document.contactForm["qualities[]"].length; i++){