我有一个表单字段(一系列复选框),它是从数据库动态创建的,因此表单上可能不存在该字段(如果数据库中没有匹配的值)。我有一些代码需要根据字段是否存在来执行,如果确实存在,则拉入所选的值。我似乎无法得到javascript来承认这个字段存在。这是我尝试过的:
function displayAction(){
var f = document.adminForm;
var a = f.action;
if(f.prefix.value!="-") {
a = a + '&task=callExclusionDisplay&prefix=' + f.prefix.value;
}
else {
var exclusions = document.getElementById("exclusions");
if (exclusions != null){
alert("exclusions set");
a = a + '&task=callExclusionCreate&prefix=' + f.prefix.value + '&exclusions=' + exclusions.join();
}
}
alert('after if, action is ' + a);
}
代码永远不会传递if语句检查以查看exclusions是否为null,即使我在查看页面时有一些名为exclusions的复选框(id也设置为exclusions)。问题是!= null,因为它是一组复选框,而不是一个表单元素?我怎样才能让它发挥作用?如果我跳过测试为null,那么如果数据库没有返回任何匹配的值,则代码会抛出有关排除项未定义的错误。
答案 0 :(得分:2)
您正在使用document.getElementById
,但表单元素具有名称。
请尝试使用f.elements.namedItem("exclusions")
代替exclusions != null
答案 1 :(得分:1)
同一页面中的多个元素无法共享id
属性(即。id
必须是唯一的或未设置)。同样,虽然一些(较旧的)浏览器错误地收集名称与getElementById
查找的ID相匹配的元素,但这是无效的,并且不能跨浏览器工作。
如果您想获取一组元素,可以为它们提供相同的name
属性,并使用document.getElementsByName
来获取该组。请注意,结果将是NodeList
,它有点像数组,因为它可以迭代。
答案 2 :(得分:0)
所有复选框都有相同的ID ==排除项吗? 如果是,那么你必须先纠正它。
在您这样做之前,您是否尝试选中第一个复选框并查看if条件是否通过?
答案 3 :(得分:0)
如果您有多个ID为“exclusions”的元素,则会搞砸getElementById的功能。我会从您的所有元素中删除重复的“排除”ID并使用getElementByName()代替,并为您的复选框组添加name =“exclusions”。
编辑: 但是使用jQuery有一种更简单的方法,它为您提供了一些跨浏览器兼容性保证。要对jQuery执行相同操作,请执行以下操作:
var checkBoxesExist = $('[name=exclusions]').count() > 0;
或者,如果您已经为您的元素提供了唯一的ID,那么您可以这样做:
var checkbox1exists = $('#checkBox1').count() > 0;
答案 4 :(得分:0)
每个元素都必须具有唯一ID。
然后,您可以像这样检查:
if (document.getElementById('exclusions1')) {
//field exists
}
或者如果你需要遍历其中一堆:
for (x=0; x<10; x++) {
if (document.getElementById('exclusions' + x)) {
//field X exists
}
}