2012-09-27 99 views
7

這一定是簡單的事情。我搜索了互聯網,只發現語法錯誤是這個問題的原因,但我找不到語法錯誤。onChange函數未定義

這裏的JavaScript:

<script type="text/javascript" src="http://localhost/acrilart/javascript/jquery-1.6.4.min.js"></script> 
<script type="text/javascript"> 
    $(document).ready(function(){ 
     function hi(){ 
      alert('hi'); 
     } 
     hi(); 
    }); 
</script> 

和HTML:

<input type="text" name="cep" value="" id="cep" class="required cep field" 
     onChange="hi()" /> 

在頁面加載的功能hi稱爲預期,但我onChange事件導致Firebug的錯誤,稱功能不定義。我真的很難過。我拼錯'嗨'了嗎?

+0

嘗試使用';'內的單行函數,因爲解釋需要知道一切都結束了。 –

+0

感謝您的回答,但經過測試,我發現它可以在分號和分號之間使用。 –

回答

14

hi函數僅在ready事件處理函數的範圍內。移動它的事件處理程序的外部,或處理所述結合裏邊有(和刪除從標記行內的事件處理程序的屬性):

$(document).ready(function(){ 
    function hi(){ 
     alert('hi'); 
    } 
    $("#cep").on("change", hi); 
}); 
+0

很棒的回答。謝謝!它可能花了我32年的時間來弄清楚。 –

4

hi功能僅在ready塊定義。外面,它不再存在。

您不需要將功能定義包裝在.ready()中,只需將其刪除即可。另外,這樣定義函數:

window.hi = function() {...} 
1

在你的代碼塊:

<script type="text/javascript"> 
    $(document).ready(function(){ 
     function hi(){ 
      alert('hi'); 
     } 
     hi(); 
    }); 
</script> 

hi不是全局函數。您只能在function(){...}的範圍內訪問它,而不是從外部訪問它。

由於您使用的是jQuery,因此您可以更改將函數綁定到onChange事件的方式。而不是從HTML標籤調用它,你可以這樣寫:

<script type="text/javascript"> 
    $(document).ready(function(){ 
     function hi(){ 
      alert('hi'); 
     } 
     hi(); 

     $('#cep').on('change', function(){ hi(); }); 
    }); 
</script> 
1

onchange當控制模糊時纔會觸發。改爲嘗試onkeypress

$("#cep").on("change", function() { 
    alert(1); 
}); 

<input type="text" name="cep" value="" id="cep" class="required cep field" 
onkeypress="hi()" /> 

使用下面的事件,而不是onchange

- onkeyup(event) 
- onkeydown(event) 
- onkeypress(event) 
2
<script src="http://code.jquery.com/jquery-latest.js"></script> 

<script type="text/javascript"> 
function hi(){ 
    alert('hi'); 
} 
</script> 

<input type="text" name="cep" value="" id="cep" class="required cep field" onKeyPress="javascript:hi();" />