6

我正在使用 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();
        ...

这在大多数情况下都有效,但某些浏览器有时无法隐藏指示的<li>. 调试也很有挑战性,因为进入控制台似乎允许浏览器完成 DOM 插入,因此在单步执行代码时.hide() 总是有效。

我想我所追求的是方法的一个$("#theDialog").on("ready")或一个回调.html()。但那些似乎不存在。

我想过

  1. 切换到.load(),但最终我将转换为 JSONP 并且我认为不.load()支持?
  2. .hide()DOM 操作和其他 DOM 操作放在返回数据中的脚本标记中。

我怀疑#2 是推荐的方法,但想先在这里进行健全性检查。有没有人经历过这个?

非常感谢。

4

3 回答 3

1

虽然我之前的回答有效,但并没有解决你所有的问题。我推荐类似的东西:

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();

希望这有效!

于 2013-02-26T15:16:27.677 回答
0

代替:

$("#theDialog").html(data);
// hide address
$("#theDialog #BillingAddress").closest("li").hide();

你有没有尝试过:

$("#theDialog").html(data).find( '#BillingAddress' ).closest("li").hide();

我自己没有经历过,但希望这有效!

于 2013-02-25T05:39:41.447 回答
-1

它没有回调函数,但您可以使用.promise().done()

$('#selector').html(someText).promise().done(function(){
        //callback code
    });
于 2016-09-01T04:48:36.710 回答