2013-12-15 50 views
1

我找不到爲什麼我的函數沒有被調用。我把alert("test")放在那裏只是爲了測試函數是否被調用,而不是。名稱爲「clear」的函數未被調用。試圖用內聯js呼叫「clear()」

HTML:

<input type="button" onclick="clear(price,quantity)" value="Clear"> 

JS:

function clear(price,quantity){ 
    alert("test"); 
    i=0; 
    if(i<5){ 

     price[i].value = ""; 
     quantity[i].value = ""; 
     i++; 
    } 
} 

編輯:這裏的所有代碼:

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>Amount Owed</title> 
<script type = "text/javascript"> 
function amount(price, quantity){ 
    sum1 = price[0].value * quantity[0].value; 
    sum2 = price[1].value * quantity[1].value; 
    sum3 = price[2].value * quantity[2].value; 
    sum4 = price[3].value * quantity[3].value; 
    return sum1 + sum2 + sum3 + sum4; 
} 
function clear(price,quantity){ 
    alert("test"); 
    i=0; 
    if(i<5){ 

     price[0].value = ""; 
     quantity[0].value = ""; 
     i++; 
    } 
} 
</script> 
</head> 
<body> 
<h1>Amount Owed</h1> 
<p>Enter price for first amount and quantity for each item</p> 
<form> 
<table> 
    <tr> 
     <td>PRICE</td> 
     <td>QUANTITY</td> 
    </tr> 
    <tr> 
     <td><input type="text" name="price" size="6"></td> 
     <td><input type="text" name="quantity" size="6"></td> 
    </tr> 
    <tr> 
     <td><input type="text" name="price" size="6"></td> 
     <td><input type="text" name="quantity" size="6"></td> 
    </tr> 
    <tr> 
     <td><input type="text" name="price" size="6"></td> 
     <td><input type="text" name="quantity" size="6"></td> 
    </tr> 
    <tr> 
     <td><input type="text" name="price" size="6"></td> 
     <td><input type="text" name="quantity" size="6"></td> 
    </tr> 
</table> 
<input type="button" onclick="pay.value = amount(price,quantity)" value="Total"> 
<input type="button" onclick="clear(price,quantity)" value="Clear"> 
<p>The total is: <input type="text" id="pay" name="pay"></p> 
</form> 
</body> 
</html>  
+4

您的JavaScript控制檯中是否有任何錯誤? –

+0

你在哪裏宣佈js? –

+0

@PedroL。 - 什麼時候沒關係。直到click事件觸發並且函數不嘗試觸摸DOM時纔會調用該函數。 – Quentin

回答

4

可能是因爲clear(price,quantity)在你的HTML是無效的。我敢打賭,如果你檢查你的控制檯,它說「價格」不存在。

只是爲了驗證,我創建了一個demo here (click),它顯示在控制檯(F12)此錯誤

Uncaught ReferenceError: price is not defined

問題是名爲「清除」內聯JS使用!

這是因爲「清除」是指document.clear,這根本不是你想要的。這是不使用內聯js的另一個參數。在這裏閱讀:Is "clear" a reserved word in Javascript?這裏:https://www.google.com/search?q=Why+is+inline+js+bad%3F

+0

我剛剛發佈了所有的代碼,所以你可以看到,他們定義了 – Snubber

+0

哪裏定義? –

+0

@Snubber解決了。看到我更新的答案。 – m59

3

在這個函數 - onclick="clear(price,quantity)" - pricequantity是沒有定義的變量,所以你會得到一個引用錯誤clear被調用之前。

您可以使用window.price = 1;或(在相同或更寬範圍內)var price = 1來定義它們。後者通常是更好的選擇。


它看起來像你想傳遞你有輸入元素的NodeLists。你不能只將它們作爲全局變量引用,你必須通過DOM訪問它們。

由於您正在處理窗體控件上的單擊事件掛鉤,因此可以通過this訪問窗體控件​​。表單控件元素對象具有引用其關聯表單的form屬性。表單元素對象有一個elements集合。元素集合允許您按名稱訪問表單控件。如果有多個具有相同名稱的控件,則會得到一個NodeList,而不是節點本身。

onclick="clear(this.form.elements.price,this.form.elements.quantity)" 
+0

我剛剛發佈了所有的代碼,所以你可以看到,它們被定義爲 – Snubber

+0

@Snubber - 不,它們不是。創建一個HTML元素不會定義一個JavaScript變量。 (至少不是以任何標準或一致的方式) – Quentin