2013-05-29 316 views
3

當我在表單域中輸入時,底部的輸入也應該自動寫入與上述域相同的地址。TypeError:ID不是函數

我使用的JavaScript正在工作,當我有外面的輸入,你可以看到下面,但我需要它的形式提交。我在控制檯得到的錯誤是「類型錯誤:自動地址是不是一個函數」下表的工作方式

<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; 
    } 
+0

「不起作用」是什麼意思? –

+0

確定其他所有東西都一樣嗎? – benestar

+0

當我在表單域中輸入時,底部的輸入也應該自動寫入與上述字段相同的地址。 –

回答

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

這實際上可能是這裏的問題 - 一些瀏覽器傾向於進口HTML元素的ID添加到全局JavaScript的命名空間(IE瀏覽器是一個主要的罪犯在這裏,但其他瀏覽器爲了兼容性原因已經調整了相同的行爲)。這可能會導致實際的JS對象/變量在JavaScript被覆蓋之前被加載。

所以試着命名你的HTML元素和你的JavaScript函數有些不同。

2

重命名函數(或<input>)。

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

的形式裏面,所有<... onkeyup="autoAddress();"/>autoAddress這裏實際上是與autoAddress ID的元素的引用。當<input>在功能之外時不會發生這種情況(因爲那麼<script>標籤的範圍無論放在哪裏,都有更高的優先級)。

因此,重新命名功能或輸入(或將其保留在<form>之外)。

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

我有這個錯誤我自己一次,ID autoAddress會在DOM對象。更改函數名或ID,它會工作