使用element.parentNode.removeChild(元素)时无法删除表单元素

时间:2012-09-16 20:22:41

标签: javascript element removechild

我有一个表单会提交给Google Search Appliance,形成一个查询字符串“q”。

在表单中我有单选按钮和隐藏元素;单选按钮包含要选择的站点的选项;隐藏元素包含多个站点,允许用户选择多个站点搜索。

<input type="radio" id="site_search" name="as_sitesearch" value="www.mycompany.com" checked>Current site<br />
<input type="radio" id="site_search" name="as_sitesearch" value="archive.mycompany.com">Archive site<br />
<input type="radio" id="site_search" name="as_sitesearch" value="">Both sites<br />
<input type="hidden" id="as_oqOption" name="as_oq" value="www.mycompany.com archive.mycompany.com">

这是我写的Javascript,它将独占删除无线电元素或隐藏元素(其中一个可以存在于提交表单中):

// IF THE USER CHECKED "BOTH SITES", YOU WILL HAVE TO WIPE OUT THE VALUE OF as_sitesearch TO ALLOW FOR PASSING OF as_oq FOR GOOGLE ENGINE
if (form.elements['as_sitesearch'][0].value.length == 0) {
        var goodbyeElement = document.getElementById('site_search');
        goodbyeElement.parentNode.removeChild(goodbyeElement);
} else {
        var goodbyeElement = document.getElementById('as_oqOption');
        goodbyeElement.parentNode.removeChild(goodbyeElement);
}

然而,当提交表单时,无论我点击什么无线电选项,“q”都会获得无线电和隐藏元素。

不确定为什么会发生这种情况,因为我按照DOM教程网站中的指南阅读了如何在提交之前删除表单元素。有什么想法吗?

由于

2 个答案:

答案 0 :(得分:0)

以下代码可以帮助您:

   (form.as_sitesearch[2].checked){
         for(var k=0; k<form.as_sitesearch.length;k++){
            form.as_sitesearch[k].parentNode.removeChild(form.as_sitesearch[k])
        }
    }
   else{
        var goodbyeElement = document.getElementById('as_oqOption');
        goodbyeElement.parentNode.removeChild(goodbyeElement);    
   } 

您应该在表单提交时调用它。这里的表格是document.form [index];

答案 1 :(得分:0)

知道了!显然,form.elements总是会因为分组而失败,所以不要使用它。

// IF THE USER CHECKED "BOTH SITES", YOU WILL HAVE TO WIPE OUT THE VALUE OF as_sitesearch TO ALLOW FOR PASSING OF as_oq FOR GOOGLE ENGINE
if (document.getElementById('site_search3').checked) {
        for (var i = 1; i <= 3; i++) {
            eval('var goodbyeElement = document.getElementById("site_search' + i + '");');
            goodbyeElement.parentNode.removeChild(goodbyeElement);
        }
} else {
        var goodbyeElement = document.getElementById('as_oqOption');
        goodbyeElement.parentNode.removeChild(goodbyeElement);
}