2010-11-09 53 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)事件。

相关问题