我正在使用DOM插入来生成一些数据输入对话框。我发现在某些浏览器中,尤其是移动浏览器和IE-Mac,.html()调用后不会立即触发操作,大概是因为修改后的DOM尚未准备好。例如:
$.ajax({
type: "GET",
url: url,
dataType: 'html',
success: function (data, textStatus, jqXHR) {
$("#theDialog").html(data);
// hide address
$("#theDialog #BillingAddress").closest("li").hide();
...
Run Code Online (Sandbox Code Playgroud)
这在大多数情况下都有效,但是某些浏览器有时无法隐藏<li>。调试一直很困难,因为进入控制台似乎允许浏览器完成DOM插入,因此在单步执行代码时.hide() 始终有效。
我想我要的是方法的a $("#theDialog").on("ready")或回调.html()。但是那些似乎不存在。
我想到了
.load(),但最终我将转换为JSONP,我认为不.load()支持该功能?.hide()DOM和其他DOM操作放入返回的数据中的脚本标签中。我怀疑#2是推荐的方法,但想先在这里进行健全性检查。有人经历过吗?
非常感谢。
虽然我之前的回答有效,但并没有解决你所有的问题。我推荐类似的东西:
var myDiv=document.createElement( 'div' );
myDiv.innerHTML=data;
// now do all of your initializing, passing in myDiv like $( myDiv )
$("#theDialog").html(myDiv.innerHTML)
.find( '#BillingAddress' )
.closest("li")
.hide();
Run Code Online (Sandbox Code Playgroud)
希望这有效!