Javascript 列表框选择计数不工作不工作

Javascript 列表框选择计数不工作不工作,javascript,html,Javascript,Html,我最近尝试创建一个具有多个选择框的表单。当有人选择选项时,所选选项的数量将显示在另一个文本上。我是JavaScript的初学者 函数被调用,但它不计算所选选项的数量 <select name="element_17_1[ ]" size="7" multiple="multiple" class="element select medium" id="element_17_1[ ]" onfocus="selectCount(

我最近尝试创建一个具有多个选择框的表单。当有人选择选项时,所选选项的数量将显示在另一个文本上。我是JavaScript的初学者

函数被调用,但它不计算所选选项的数量

<select name="element_17_1[ ]"
        size="7" multiple="multiple"
        class="element select medium"
        id="element_17_1[ ]"
        onfocus="selectCount(this.form);"
        onClick="selectCount(this.form);"
    >
    <option value="Opt1">Opt1</option>
    <option value="Opt2">Opt2</option>
    <option value="Opt3">Opt3</option>
    <option value="Opt4">Opt4</option>
    <option value="Opt5">Opt5</option>
    <option value="Opt6">Opt6</option>
    <option value="Opt7">Opt7</option>
</select>
这就是我在


您试图获取名为element_17_1[]的元素,但您的选择框名为element_17_1[]。JavaScript只是将名称视为一组字符,而空格会起作用。

更改select的名称name=element_17_1和id=element_17_1,并且在函数中没有myForm,因此var selObj=myForm.elements['element_17_1';应为var selObj=f.elements['element_17_1'];而且您只能在以下事件中使用

onChange="selectCount(this.form);"
而不是

onfocus="selectCount(this.form);"
onClick="selectCount(this.form);"
完整功能:

更新:

对于php脚本,您可以保留select的name=element_17_1[],因此在函数中它应该是var selObj=f.elements['element_17_1[]];但是没有像[]这样的空间

在HTML中,您有:

> <select name="element_17_1[ ]"
>          size="7" multiple="multiple"
>          class="element select medium"
>          id="element_17_1[ ]"
>          onfocus="selectCount(this.form);"
>          onClick="selectCount(this.form);"
>      >
因此,对元素的引用直接传递给函数,函数可以是:

function selectCount(selObj) {

    // The following line isn't needed now
    // var selObj = myForm.elements['element_17_1[]'];

    var totalChecked = 0;
    for (i = 0; i < selObj.options.length; i++) {
        totalChecked += selObj.options[i].selected? 1 : 0;
    }
    // The next line needs the form, so

    selObj.form.element_9.value = totalChecked;
}
然后将该函数修改为:

function selectCount(selObj) {
    var totalChecked = 0;
    for (i = 0; i < selObj.options.length; i++) {
        totalChecked += selObj.options[i].selected? 1 : 0;
    }
    return totalChecked;
}

现在有足够的家庭作业了-

我注意到JavaScript函数在方括号元素_17_1[]之间没有空格。这应该有一个像你选择元素的名称和id这样的空格吗?@ZhihaoJia:是的,空格就是问题所在。两个名字必须匹配。身份证,没那么多。事实上,显然ID不应该有括号或空格。技术上只允许使用字母、数字、、、:、uu和-。@sadpcd–表单控件不需要ID,但它们必须有一个名称才能成功,即包含在提交中。您可以对该函数进行编程,以使select元素的名称不相关。我无法删除[],除非我无法在php foreach$\u POST['element\u 17\u 1']中将其作为$names调用。您不必删除括号,只需删除空格即可。额外的空格使您要查找的名称与元素的名称不同。这两个名称应该是相同的,一个字符接一个字符。我不能删除[],除非我不能在php中将其称为$namesreally thanx$names['element\u 17\u 1'],否则代码会起作用。如果我想单击element\u 9并从element\u 17\u 1列表框中获取所选项目的数量,我应该尝试什么代码
           onfocus="selectCount(this);"
           onClick="selectCount(this);"
function selectCount(selObj) {

    // The following line isn't needed now
    // var selObj = myForm.elements['element_17_1[]'];

    var totalChecked = 0;
    for (i = 0; i < selObj.options.length; i++) {
        totalChecked += selObj.options[i].selected? 1 : 0;
    }
    // The next line needs the form, so

    selObj.form.element_9.value = totalChecked;
}
<input name="element_9" onclick="
 this.value = selectCount(this.form['element_17_1[ ]']);
">
function selectCount(selObj) {
    var totalChecked = 0;
    for (i = 0; i < selObj.options.length; i++) {
        totalChecked += selObj.options[i].selected? 1 : 0;
    }
    return totalChecked;
}