【问题标题】:jQuery, apply .buttonset to an element that's not yet loadedjQuery,将 .buttonset 应用于尚未加载的元素
【发布时间】:2011-12-22 15:01:01
【问题描述】:

我的以下代码运行良好:

    $field2.on("change", "#selector", function(){
        $field2.load("./index.php?show-options=true", { value: $(this).val() }, function() {
        $("#options").buttonset();
        });
    });     

它加载#options div 并将按钮应用于其中的锚标记。

有没有办法声明

$("#options").buttonset();

在#options div 加载之前?

我浏览了 jQuery 文档但没有成功,也找到了这个答案:

Apply jQuery UI widgets to ajax loaded elements

我认为这可能会走上正轨,但还没有完全理解,也没有设法实施。

帮助感谢,谢谢。

【问题讨论】:

    标签: ajax jquery jquery-widgets


    【解决方案1】:

    执行以下操作:

    $field2.on("change", "#selector", function(){
        $field2.load("./index.php?show-options=true", { value: $(this).val() }, function() {
          $field2.find("#options").buttonset();
        });
    });
    

    将 $field2 中的所有选项元素组成一个按钮集(一旦内容更新)。

    或者,您也可以将按钮设置为 dom 就绪:

    $(function() { $("#options").buttonset(); });
    

    更新

    jQuery 选择器作用于 DOM 中的元素(除非给定上下文),如果元素不在 DOM 中,那么很遗憾 jQuery 将无法直接影响它。如果加载然后调用 buttonset 导致 FOUC(无样式内容的闪烁),您可以尝试以下操作:

    $field2.on("change", "#selector", function() {
        $field2.empty();
        $.get("./index.php?show-options=true", { value: $(this).val() }, function(data) {
          var newContent = $(data);
          $("#options", newContent).buttonset();
          $field2.empty().append(newContent);
        });
    });
    

    【讨论】:

    • 谢谢,但我的目标是在 .load 之前声明 ("#options").buttonset()。当我在 .load 之后声明它时,即使没有 .find 也可以工作。
    • 除了有一个更具体的选择器之外,我看不出这与原始代码有何不同。它仍在创建按钮集作为加载函数的回调,就像原来的一样。
    • @Freelancer 您希望在哪个时间点将具有 id 选项的元素变为按钮集? OnDomReady,当#selector 更改或响应另一个事件时?
    • @rich.okelly:我猜是 onDomReady。我希望#options 从加载的那一刻起就成为按钮集,但我想在加载#options 之前声明它。这可能吗?
    • @Freelancer 不幸的是,你只能在它存在(即加载)后将其设为按钮集。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-03
    • 2020-08-11
    • 2010-10-14
    相关资源
    最近更新 更多