2012-01-10 99 views
4

在jQuery.html()中,我想执行下面的脚本。如何在jQuery的.html()中执行jquery/javascript代码

$("#row1").html("<td id="cellId"><script>if (selectedStr) {var elem = $(\"#cellId\");  
$(elem).bind(\"onRefresh\", function() {loadColor(selectedStr); storeStr(selectedStr);});$(elem).trigger(\"onRefresh\");) }</script><td>") 

要求:

我有一个testPage.jsp其中包含与细胞表。当选择特定的单元格并单击“提交”按钮时,将打开一个弹出窗口。在弹出页面中,一些数据被更改并通过ajax进行处理。生成的ajax响应必须动态设置为父行。 ajax响应构建了要设置的全部内容。这是我失败的地方。 Ajax响应将是这样的。 <td>.....<td> <td>.....<td> <td>content<script>...</script></td> <td>.....<td> <td>content<script>...</script></td> ... 此外,该 “selectedStr” 是testPage.jsp一个javascript全局变量。

问题: 1.“selectedStr is undefined”是浏览器错误信息。我无法获得全局变量的参考。 2.元素绑定没有发生。

我试图利用jQuery.getScript(),jQuery.globalEval,jQuery.eval。 我无法理解JQuery的{{html}}。

谢谢!

+1

,我认为你应该采取的,如果这个句子,让你需要的所有程序和finaly填充#ROW1与所需的HTML代码 – 2012-01-10 15:58:49

+1

的报价在你的HTML被错误地转义....'“cellId'” – david 2012-01-10 16:04:40

+0

“cellId”转义是问题中的拼写错误。 – chinni 2012-01-10 16:14:49

回答

-1

我做什么,当我需要这是在动态内容来定义一个隐藏的div:

<div id="afterAjax" style="display:hidden"> 
if (selectedStr) { 
    var elem = ... etc... 
</div> 

请注意,我没有<script>标签。

之后,阿贾克斯后(或之后你,否则其插入到你的HTML:

eval($('#afterAjax').html()); 

更新

这里是一个展示它的工作小提琴 - 不知道为什么有人打上我的回答下来。:(我用的正是这一点,当我需要做的是

代码在小提琴就是:

$('body').append('<div id="test">test</div><div id="afterAjax" style="display:none">alert("works");</div>'); 

eval($("#afterAjax").html()); 

http://jsfiddle.net/mhart/y22r5/3/

+0

错误的编码器,没有'eval()'! – Blazemonger 2012-01-10 16:12:35

+0

感谢您的回复。但是,一旦ajax响应内容被添加到DOM,eval()就不能工作。是否应该在

0

你应该以这种方式建立的html:

var newRow = $('<tr/>').bind('onRefresh',function(){ 

{code} 

}); 

$("#row1").append(newRow); 

$("#row1").html(newRow); 

,但我真的不明白应该如何准确您的网页上工作

+0

其实我把这个事件绑定到​​。所以每​​我需要绑定事件。基于“selectedStr”,我将决定是否绑定事件。 – chinni 2012-01-10 16:36:56

3

而不是把所有东西都放到脚本中,在内存中构建元素,然后在addi之前添加事件处理程序纳入DOM。

$td = $("<td></td>").attr("id", "cellId") 
    .bind("onRefresh", function() { 
     if (selectedStr) { 
      loadColor(selectedStr); 
      storeStr(selectedStr); 
     } 
    }) 
    .trigger("onRefresh"); 

$("#row1").html($td); 

此外,请谨慎使用相同的ID添加多个td元素。

+0

我正在构建元素数据作为Ajax响应的一部分。之后,我将它添加到DOM。因此,您在.html()中看到的全部内容都是动态构建的。 – chinni 2012-01-10 16:32:32

+0

这很好,只需将上面的代码添加到您的成功处理程序。 – 2012-01-10 16:33:18

0

如果您正在寻找填充基于javascript输出的html,您应该使用函数作为jQuery.html()的参数。见下文。

$("#row1").html(function (index, oldHTML){ 
var elem = $(this); 
//This is where you could run your if and other functions 
//formulate the new html 
//then just return it to set the html 
return newHTML; 
}); 

此外,对于更多的例子阅读jQuery.html() api