确定表单上是否存在字段

时间:2010-08-25 17:26:48

标签: javascript

我有一个表单字段(一系列复选框),它是从数据库动态创建的,因此表单上可能不存在该字段(如果数据库中没有匹配的值)。我有一些代码需要根据字段是否存在来执行,如果确实存在,则拉入所选的值。我似乎无法得到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,那么如果数据库没有返回任何匹配的值,则代码会抛出有关排除项未定义的错误。

5 个答案:

答案 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
    }
}