2013-03-12 55 views
0

我的问题返回的元素上运行,如何让Java脚本是如何才能让我的Java脚本上,通过AJAX返回的元素运行。该JavaScript不适用于AJAX返回的内容。在我的脚本中,它假设弹出一个带有“你好”但不是的对话框。我怎样才能使它工作或有其他方法呢?感谢您的建议。下面通过AJAX

的是我的代码...

的index.html

<html> 
    <head> 
     <title></title> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <script type="text/javascript" src="js/jquery-1.9.1.min.js"></script> 


     <script type="text/javascript"> 
      $(document).ready(function() { 
       $("#box_1").on("click", function() { 
        alert("Hello!"); 
       }); 

       changeDisplay(); 
      }); 

      function changeDisplay() { 
       if (window.XMLHttpRequest) 
       {// code for IE7+, Firefox, Chrome, Opera, Safari 
        xmlhttp=new XMLHttpRequest(); 
       } 

       else 
       {// code for IE6, IE5 
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
       } 

       xmlhttp.onreadystatechange=function() 
       { 
        if (xmlhttp.readyState==4 && xmlhttp.status==200) 
        { 
         document.getElementById("text").innerHTML=xmlhttp.responseText; 
        } 

       } 
       xmlhttp.open("POST","ajaxHandling.php",true); 
       xmlhttp.send(); 

      }; 
     </script>  
    </head> 
    <body> 
     <h1>Ajax Test</h1> 
     <div id="text"> 

     </div> 
    </body> 
</html> 

ajaxHandling.php

<?php 
    echo '<div id="box_1" class="box">Click me</div>'; 
?> 
+0

出于兴趣,你有什么理由为什么当你运行jQuery时使用vanilla JS作为AJAX? – 2013-03-12 16:09:56

+0

为什么不使用jQuery提供的'ajax'函数?它允许你在发送ajax请求之前,在成功和完成之后调用函数。 http://api.jquery.com/jQuery.ajax/ – martincarlin87 2013-03-12 16:10:24

+0

除非你有一些禁止或不能JS库添加到页面,这是更好的使用jQuery,原型,或者有成千上万的人已经测试了另一个库,而比滚动你自己的Ajax例程。如果你不能添加JQuery,你应该在你的问题中说:) – Gus 2013-03-12 16:16:08

回答

4

一个共同的问题,你需要使用正确的on()未来元素的语法将其绑定到未来的父元素在脚本运行时存在的元素。

$(document).on("click", "#box_1", function() { 
    alert("Hello!"); 
}); 

我已经使用过文档,但是使用最接近的现有父代更好。例如:

$("#wrapper").on("click", "#box_1", function() { 
    alert("Hello!"); 
}); 
+1

对于一些人阅读jQuery的文档实在是太难了 – letiagoalves 2013-03-12 16:11:50

+0

'。对()'为未来的元素没有得到很好的解释,或者是不是我最后一次看着它。 – 2013-03-12 16:12:29

+0

有很多关于使用jQuery委托事件的文章。快速搜索比重新发布像这些常见问题 – letiagoalves 2013-03-12 16:13:24

0

我简单的回答是,你需要点击事件略有不同绑定,使用jQuery.on

$('#text').on('click', '#box_1', function() { 
    alert('Hello!'); 
}); 

此动态结合的Click事件到#text元素中的任何项目(或随后到#text加入的元素)你#box_1选择匹配。

我长的答复是,如果你正在使用jQuery,你也应该充分利用它的AJAX库,而不是滚你自己。

$.ajax({ 
    url: '/ajaxHandling.php', 
}).done(function (data) { 
    $('#text').html(data); 
}); 
+0

非常感谢您的意见,它的工作原理。 – overshadow 2013-03-12 16:28:56