Javascript 列表框选择计数不工作不工作
我最近尝试创建一个具有多个选择框的表单。当有人选择选项时,所选选项的数量将显示在另一个文本上。我是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(
<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;
}