在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}}。
谢谢!
答案 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());