TypeError:ID不是函数

时间:2013-05-29 21:35:02

标签: javascript

当我在表单字段中输入时,底部的输入也应该自动写入与上述字段相同的地址。

当我在外面输入时,JavaScript im using正在工作,如下所示,但我需要在提交表单中使用它。我在控制台中遇到的错误是“TypeError:autoAddress不是函数”以下表单工作

<form id="addNews" name="address" action="addevent.php" method="post" class="addStuff" enctype="multipart/form-data">
    <h3>Address1:</h3><input type="text" class="title" name="address1" onkeyup="autoAddress();">
    <h3>Address2:</h3><input type="text" class="title" name="address2" onkeyup="autoAddress();">
    <h3>City:</h3><input type="text" class="title" name="city" onkeyup="autoAddress();">
    <h3>County:</h3><input type="text" class="title" name="county" onkeyup="autoAddress();">
    <h3>PostCode:</h3><input type="text" class="title" name="pcode" onkeyup="autoAddress();">       
</form>
<input type="text" name="fulladdress" class="title" id="autoAddress" />

我需要什么,不工作,在下面。我确定我只是缺少一些简单的东西。请注意底部的输入位于表单内。

<form id="addNews" name="address" action="addevent.php" method="post" class="addStuff" enctype="multipart/form-data">
    <h3>Address1:</h3><input type="text" class="title" name="address1" onkeyup="autoAddress();">
    <h3>Address2:</h3><input type="text" class="title" name="address2" onkeyup="autoAddress();">
    <h3>City:</h3><input type="text" class="title" name="city" onkeyup="autoAddress();">
    <h3>County:</h3><input type="text" class="title" name="county" onkeyup="autoAddress();">
    <h3>PostCode:</h3><input type="text" class="title" name="pcode" onkeyup="autoAddress();">
    <input type="text" name="fulladdress" class="title" id="autoAddress" />
</form> 

JavaScript如下

function autoAddress(){
    var address1 = document.address.address1.value;
    var address2 = document.address.address2.value;
    var city = document.address.city.value;
    var county = document.address.county.value;
    var postcode = document.address.pcode.value;

    var parts = [
        address1,
        address2,
        city,
        county,
        postcode
      ];

    var address = new Array();

    for (var i=0; i<=parts.length; i++){
        if (parts[i]){
            address.push(parts[i]) ;
        }
    }

    var joined = address.join(', ');

    document.getElementById('autoAddress').value = joined;
  }

3 个答案:

答案 0 :(得分:3)

<input type="text" name="fulladdress" class="title" id="autoAddress" />

我自己有这个错误,id autoAddress在DOM中创建了一个对象。更改功能名称或ID,它将起作用

答案 1 :(得分:3)

<input type="text" name="fulladdress" class="title" id="autoAddress" />
                                                    ^^^^^^^^^^^^^^^^
function autoAddress(){
         ^^^^^^^^^^^

这实际上可能是这里的问题 - 某些浏览器倾向于将HTML元素的ID导入到全局JavaScript命名空间中(Internet Explorer在这里是一个主要的攻击者,但是出于兼容性原因,其他浏览器已经调整了相同的行为)。这可能导致在覆盖之前加载来自JavaScripts的实际JS对象/变量。

因此,尝试将HTML元素和JavaScript函数命名为不同的东西。

答案 2 :(得分:2)

重命名该函数(或<input>)。

<input type="text" name="fulladdress" class="title" id="autoAddress" />

位于表单中,对于所有<... onkeyup="autoAddress();"/> autoAddress,这里实际上是对具有autoAddress id的元素的引用。当<input>在函数之外时,就不会发生这种情况(因为<script>标记的范围,无论你放在哪里,都有更高的优先级)。

请重命名该功能或输入(或将其留在<form>之外)。