如何在jquery的.html()中执行jquery / javascript代码

时间:2012-01-10 15:54:43

标签: jquery

在jQuery.html()中,我想执行以下脚本。

$("#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未定义”是浏览器错误消息。我无法引用全局变量。 2.元素绑定没有发生。

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

谢谢!

4 个答案:

答案 0 :(得分:3)

不是将所有内容放入脚本中,而是在内存中构建元素,然后在添加到DOM之前将事件处理程序添加到其中。

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

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

另外,要小心添加具有相同ID的多个td元素。

答案 1 :(得分:0)

您应该以这种方式构建html:

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

{code}

});

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

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

但我真的不明白它应该如何在你的页面上运作

答案 2 :(得分: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

答案 3 :(得分:-1)

当我需要时,我要做的是在动态内容中定义隐藏的div:

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

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

然后,在ajax之后(或者在你将其插入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/