2014-05-08 29 views
0

我在页面中有一些更新页面某个部分的ajax脚本。问题在于输出在div元素中更新,它使得写入的任何javascript完全无用。在div元素内执行javascript ajax更新

用div编写的脚本是用php代码编写的,并且是动态的而不是静态的(因此将它们包括到主页中不是一种选择)。

基本构建适应和支持是这样的:

<div id="someid"> 
    <script type="text/javascript"> 
    //<![CDATA[ 
    // some code that is dynamically created with php and is not working 
    //]]> 
    </script> 
    <!--Some html code that is dynamically created with php--> 
    <!--The html code created needs that script above--> 
    <!--Possibly more scripts that are...--> 
    <!--you guessed it! Dynamically created with php--> 
</div> 

可能的结果:

<div id="someid"> 
    <script type="text/javascript"> 
    //<![CDATA[ 
    $(function() { 
    $("#20").datepick({dateFormat: 'yyyy-mm-dd'}); 
    }); 
    //]]> 
    </script> 
    <input id="20" type="text" name="somename" maxlength="10" />"; 
</div> 

^所有上述值的可能用户输入动态变化。代码

例子:

<script type="text/javascript"> 
//<![CDATA[ 
    function showsubs() 
    { 
    var xmlhttp;  
    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("someID").innerHTML=xmlhttp.responseText; 
    } 
    } 
    xmlhttp.open("GET","give.php",true); 
    xmlhttp.send(); 
    } 
//]]> 
</script> 
<input type="button" onclick="showsubs()"> 
<div id="someID"></div> 

哪里give.php是简单的:

<script type="text/javascript"> 
    $(function() { 
    $("#inputField2").datepick({dateFormat: 'yyyy-mm-dd'}); 
    }); 
<br /><br /> 
<input type="text" size="12" id="inputField2" /> 

我自己也尝试这样的:(我有标记的DIV中每个脚本类)

<script type="text/javascript"> 
//<![CDATA[ 
console.log("start"); 
function evalme() 
{ 
    console.log("eval"); 
    var a=document.getElementsByClassName('scriptttorun'); 
    console.log(a.length); 
    for (var i=0;i<a.length;i++) 
{ 
eval(document.getElementsByClassName('scripttorun')[i].innerHTML); 
} 

} 
$('document').ready(evalme());//I call evalme on other circumstances as well 

     //]]> 
    </script> 

但eval不会激活我的功能..

+0

你有没有尝试在关闭div结束前放脚本?也许如果你提供一些输出的例子,帮助我们更好地理解问题 – keypaul

+0

@keypaul我刚才编辑了我的问题。我需要把脚本放在顶部,这样我可以在后面的html代码中使用它的功能。问题是JavaScript不能在div元素内部执行,所以我需要做一些事情。 – dx4

+0

你可以提供你的脚本或其中的一部分吗 – keypaul

回答

0

您应该尝试将代码作为普通JavaScript获取。在您的AJAX成功处理程序上,尝试使用您收到的脚本eval

这是大多数远程JavaScript包含插件所做的。虽然当你这样做时,你需要知道闭包,JavaScript范围的确切效果。


方法1:

如果你可以使用jQuery,那么最好的方法是使用下面的方法:

$.ajax({ 
    type: "GET", 
    url: "test.js", 
    dataType: "script" 
}); 

这将要求test.js(你可以使用javascriptgenerator.php太) 。

如果指定script$.ajax()将执行从服务器上把它传递给成功处理程序作为一个字符串之前收到的JavaScript。


方法2:

eval的方法。尝试给一个ID,以你的脚本标签:

<script id='someID'> 
    //your dynamic javascript 
</script> 

现在你注入你的JavaScript到您的div后,你可以做到以下几点:

eval(document.getElementById('someID').innerHTML); 

还是让我知道你选择哪一种方法。

+0

你可以在你的答案中添加一个例子吗? – dx4

+0

@ dx4,增加了两个例子,你可以使用你喜欢的任何一个:) –

+0

事情是这个脚本不是静态的。在这个例子中,我发布了#20也许#5或#putanynumberhere。也可能有更多的脚本。编辑:我会尝试第二个,回到你身边。 – dx4

0

如果jQuery是加载

<script type="text/javascript"> 
//<![CDATA[ 
(function(){ 
    var checkIntv; 
    function checkJQuery(){ 
     if (typeof jQuery == 'undefined') { 
      checkIntv = setInterval(function(){checkJQuery()}, 100); 
      console.log('wait...'); 
     } else { 
      clearInterval(checkIntv); 
      console.log('do something'); 
      $("#20").datepicker({dateFormat: 'yyyy-mm-dd'}); 
     } 
    } 
checkJQuery(); 
}()); 
//]]> 
</script> 

但是,你有什么样的错误你可以检查? $ undefined?要不然?

+0

Javascript简单地不运行,当它在里面'div'元素。我有jQuery导入到页面中。 – dx4

+0

可能我不明白。无论如何,这里的在线测试http://www.roughdesign.it/sof/test-date/ – keypaul

+0

我在我的问题中添加了一个示例。我希望你现在能理解。 – dx4