2010-11-09 55 views
2

我無法獲得警報。我錯過了什麼? (下面的代碼是一個WP插件內)我無法獲得警戒。我錯過了什麼?

<?php 
wp_enqueue_script('jquery'); 
?> 
<script type="text/javascript"> 
    jQuery('#myTest').click(function(){alert('hi');}); 
</script> 
<?php 
    echo "<div><input type='button' value='Test' id='myTest' /></div>"; 
?> 

回答

9

該腳本元素前處理,因此#myTest當你分配處理程序不存在。各地交換他們:

<?php 
    echo "<div><input type='button' value='Test' id='myTest' /></div>"; 
?> 
<script type="text/javascript"> 
    jQuery('#myTest').click(function(){alert('hi');})); 
</script> 

或者,你可以使用live()允許綁定事件,至目前還不存在的元素:

<script type="text/javascript"> 
    jQuery('#myTest').live("click", function(){alert('hi');})); 
</script> 
<?php 
    echo "<div><input type='button' value='Test' id='myTest' /></div>"; 
?> 

或使用jQuery的ready()處理程序,這將火的時候,所有的元素已經被解析:

<script type="text/javascript"> 
    jQuery(document).ready(function ($) { 
     $('#myTest').click(function(){alert('hi');})); 
    }); 
</script> 
<?php 
    echo "<div><input type='button' value='Test' id='myTest' /></div>"; 
?> 

注意,在最後一個例子,我走樣jQuery的命名空間中傳遞給函數的3210參數。這使您可以使用$用於jQuery和WordPress,而不是一直輸入jQuery

+1

爲什麼要在'ready'處理程序中使用'.live()'作爲單個元素? :) – 2010-11-09 16:16:27

+0

@Nick:該死的複製和粘貼......呃......啊!我的意思是,我不知道你在說什麼...... *口哨聲* ;-) – 2010-11-09 16:18:18

+1

hehe,+1,非常完整 – 2010-11-09 16:20:13

1

你錯過了document.ready處理程序,就像這樣:

<script type="text/javascript"> 
jQuery(function() { 
    jQuery('#myTest').click(function(){alert('hi');}); 
}); 
</script> 

通過包裝它像這樣,它會等到元素裝入DOM,並準備通過jQuery('#myTest')被發現。

0

試試這個在您的腳本標籤:內容加載之前

$(document).ready(function() { 
    $('#myTest').click(function(){alert('hi');}); 
}); 
+0

'$'在這裏不起作用,因爲他使用的是wordpress – 2010-11-09 16:15:12

+0

爲什麼不呢?我同時使用jquery和wordpress,並沒有這個問題? – Brady 2010-11-09 16:16:51

1

腳本執行。腳本執行時無法找到ID爲myTest的元素,因此它只是忽略添加事件處理程序。

將腳本放在事件之後,或者監聽(onload | document.ready)事件。

相關問題