使用jQuery .load()返回的结果与页面中的实际结果略有不同

时间:2011-03-31 16:57:37

标签: jquery jquery-ui

首先,我正在使用jQuery UI为我的按钮设置外观。我有一个有按钮的表单。此表单包含不同数量的复选框。如果我有一个复选框消失,其中一个按钮的方法是,在复选框删除成功后,.load()是没有页面刷新的新复选框。

以下是代码:

$('#zoneRemove').live('click',function() {
        $.post('php/zoneNotifUnsub.php', $('#zoneNotifUnsub').serialize(), function(){
            $('#zoneDiv').load('notifications.php #zoneDiv');
         });
    });

效果很好。唯一的问题是,当#zoneDiv重新加载时,它似乎返回一个不同的结果,因为我的按钮没有蒙皮(按钮在div中,将它放在外面会使整个事情不起作用)。这通常是JS语法错误的症状(因为我的脚本中的任何错误都会导致按钮蒙皮失败;这是一个用于调试的半有用的错误/功能)。但是,我显然不会更改任何JS代码。唯一可以改变的是#zoneDiv中包含的某些PHP的输出。

任何帮助?

5 个答案:

答案 0 :(得分:1)

这是因为您的按钮是由JQuery UI动态更改的。只需再次对该div中的元素运行.button()(您可以将.button更改为您需要的任何功能):

    $('#zoneDiv').load('notifications.php #zoneDiv', function(){$(this).find('.button').button();});

无论你在页面加载时对div做什么样的风格,你都必须重新做一遍。

答案 1 :(得分:0)

当您加载“#zoneDiv”时,当您加载页面时需要重新运行时,是否使用javascript进行任何类型的样式设置?

答案 2 :(得分:0)

由于您使用代码而不是标记(例如,调用jQuery UI的Button内容)来“剥离”按钮,因此不会自动应用于新内容。您需要重新运行用于发现按钮实例的代码并将外观应用于它们。

使用load回调来触发代码,例如:

$('#zoneRemove').live('click',function() {
    $.post('php/zoneNotifUnsub.php', $('#zoneNotifUnsub').serialize(), function(){
        $('#zoneDiv').load('notifications.php #zoneDiv', function() {
            // This is the callback; make all checkboxes in the content "buttons"
            $(this).find(":checkbox").button();
        });
    });
});

......或类似的。

答案 3 :(得分:0)

你使用$('mybutton').button()来“修饰”你的按钮吗?如果是这样,你需要再次调用它,因为你按下的按钮消失了,并且。button()不在线。

所以试试这个:

$('#zoneDiv').load('notifications.php #zoneDiv', function(){
    $('mybutton').button();
});

答案 4 :(得分:0)

您的第一段中似乎提到了这个问题:I'm using jQuery UI for skinning my buttons。无论您对皮肤做什么,您的按钮也需要对新加载的内容进行操作。即如果你在pageload上做这样的事情:

$(function() {
  ...
  $('#zoneDiv button.my-button').button();
  ...
});

然后,当新的#zoneDiv加载时,之前已经应用了按钮功能的所有DOM元素将不再存在。所以你必须做这样的事情,在load()函数中添加一个回调。在新内容陷入DOM后立即触发:

$('#zoneDiv').load('notifications.php #zoneDiv', function(){
    $('#zoneDiv button.my-button').button();
});