【问题标题】:JQuery ui tabs by class not updating correctly按类的 JQuery ui 选项卡未正确更新
【发布时间】:2014-01-31 10:09:42
【问题描述】:

由于 jquery-ui 选项卡使用 id 而不是类标签,我创建了一个函数来为我的所有类生成 id。现在我想添加新内容并将其应用于新内容,但添加新内容后,所有其他选项卡都停止工作!

这是html内容:

<div class="accordion">
    <h3>Product x</h3>
    <div class="tabs">
        <ul>
            <li><a href="" class="tabpanellink">General product info</a></li>
            <li><a href="" class="tabpanellink">End user info</a></li>
        </ul>
        <div class="tabpanel">
            general info for product x.
        </div>
        <div class="tabpanel">
            end user info product x.
        </div>
    </div>
</div>
<div class="accordion">
    <h3>Product y</h3>
    <div class="tabs">
        <ul>
            <li><a href="" class="tabpanellink">General info</a></li>
            <li><a href="" class="tabpanellink">End user info</a></li>
        </ul>
        <div class="tabpanel">
            general info for product y.
        </div>
        <div class="tabpanel">
            end user info product y.
        </div>
    </div>
</div>

这就是我想要做的:

function fixtabs(){
    $(".tabpanellink").each(
        function(uniqueindex){
            $(this).attr('href', '#tab-' + uniqueindex);
        }
    );
    $(".tabpanel").each(
        function(uniqueindex){
            $(this).attr('id', 'tab-' + uniqueindex);
        }
    );

    $(".accordion").accordion({
        collapsible: true,
        active: false
    });
}
function updateDocument(){
    fixtabs();
    $(".tabs").tabs();
}

function addProduct(){
    //Add another product(this is a server response in a real case scenario):
    var newProduct = '';
    newProduct += '<div class="accordion">';
    newProduct +=   '<h3>Product z</h3>';
    newProduct +=   '<div class="tabs">';
    newProduct +=       '<ul>';
    newProduct +=           '<li><a href="" class="tabpanellink">General product info</a></li>';
    newProduct +=           '<li><a href="" class="tabpanellink">End user info</a></li>';
    newProduct +=       '</ul>';
    newProduct +=       '<div class="tabpanel">';
    newProduct +=           'general info for new product.';
    newProduct +=       '</div>';
    newProduct +=       '<div class="tabpanel">';
    newProduct +=           'end user info product x.';
    newProduct +=       '</div>';
    newProduct +=   '</div>';
    newProduct += '</div>';
    $(".accordion").first().before(newProduct);
    updateDocument();
}
updateDocument();
addProduct();

这里是jsfiddle

如何在不破坏现有标签的情况下对新内容应用标签效果?

响应答案更新:我无法删除updateProduct();!我必须先调用 updateDocument 以便初始化所有内容! addProduct 仅在之后调用(即当用户单击添加产品时!)

【问题讨论】:

  • 您在each 调用中使用uniqueindex 作为参数名称。这不会增加您所期望的每个 uniqueindex 变量,而只会增加参数!只需删除参数并将uniqueindex 移到对每个参数的第一次调用上方即可。
  • 为什么要动态添加内容??
  • 你的意思是newProduct += etc...?它显示来自服务器的内容

标签: javascript jquery jquery-ui jquery-ui-tabs


【解决方案1】:

现在试试这个,它与您的添加产品选项一起工作正常

**

这里是fiddle

**

添加另一个 Div 作为父 Div

<div id="accor">    

<div class="accordion">
        <h3>Product x</h3>
        <div class="tabs">
            <ul>
                <!-- .tabs-0 & .tabs-1 don't work, since they are not a valid url -->
                <li><a href="" class="tabpanellink">General product info</a></li>
                <li><a href="" class="tabpanellink">End user info</a></li>
            </ul>
            <div class="tabpanel">
                general info for product x.
            </div>
            <div class="tabpanel">
                end user info product x.
            </div>
        </div>
    </div>
    <div class="accordion">
        <h3>Product y</h3>
        <div class="tabs">
            <ul>
                <!-- .tabs-0 & .tabs-1 don't work, since they are not a valid url -->
                <li><a href="" class="tabpanellink">General info</a></li>
                <li><a href="" class="tabpanellink">End user info</a></li>
            </ul>
            <div class="tabpanel">
                general info for product y.
            </div>
            <div class="tabpanel">
                end user info product y.
            </div>
        </div>
    </div>
</div>
<button id="AddProduct"> add product</button >

你的 Jquery 代码会是这样的 -

function fixtabs(){
    $(".tabpanellink").each(
        function(uniqueindex){
            $(this).attr('href', '#tab-' + uniqueindex);
            uniqueindex++;
        }
    );
    uniqueindex = 0;
    $(".tabpanel").each(
        function(uniqueindex){
            $(this).attr('id', 'tab-' + uniqueindex);
            uniqueindex++;
        }
    );

    $(".accordion").accordion({
        collapsible: true,
        active: false
    });
}
function updateDocument(){
    fixtabs();
    $(".tabs").tabs();
}

function addProduct(){
    //Add another product:
    var newProduct = '';
    newProduct += '<div class="accordion">';
    newProduct +=   '<h3>Product z</h3>';
    newProduct +=   '<div class="tabs">';
    newProduct +=       '<ul>';
    newProduct +=           '<li><a href="" class="tabpanellink">General product info</a></li>';
    newProduct +=           '<li><a href="" class="tabpanellink">End user info</a></li>';
    newProduct +=       '</ul>';
    newProduct +=       '<div class="tabpanel">';
    newProduct +=           'general info for new product.';
    newProduct +=       '</div>';
    newProduct +=       '<div class="tabpanel">';
    newProduct +=           'end user info product x.';
    newProduct +=       '</div>';
    newProduct +=   '</div>';
    newProduct += '</div>';
    $("#accor").first().append(newProduct);
    updateDocument();
   //$(".tabs").tabs();
    //fixtabs();
}
//addProduct();
updateDocument();

$('#AddProduct').click(function(){
addProduct();
//$(".tabs").tabs();
//updateDocument();
});

【讨论】:

  • 顺便说一下,增加 uniqueindex 是没有必要的!只需添加一个新的 div 就可以了!见this
  • 是的,我没有增加 uniqueindex 我只是跟着你的问题:P
【解决方案2】:

它现在工作正常 -

只需在updateDocument(); 之前调用您的addProduct(); 函数

小提琴here

function fixtabs(){
$(".tabpanellink").each(
    function(uniqueindex){
        $(this).attr('href', '#tab-' + uniqueindex);
        uniqueindex++;
    }
);
uniqueindex = 0;
$(".tabpanel").each(
    function(uniqueindex){
        $(this).attr('id', 'tab-' + uniqueindex);
        uniqueindex++;
    }
);

$(".accordion").accordion({
    collapsible: true,
    active: false
});
}

function updateDocument(){
    fixtabs();
    $(".tabs").tabs();
}

function addProduct(){
    //Add another product:
    var newProduct = '';
    newProduct += '<div class="accordion">';
    newProduct +=   '<h3>Product z</h3>';
    newProduct +=   '<div class="tabs">';
    newProduct +=       '<ul>';
    newProduct +=           '<li><a href="" class="tabpanellink">General product info</a></li>';
    newProduct +=           '<li><a href="" class="tabpanellink">End user info</a></li>';
    newProduct +=       '</ul>';
    newProduct +=       '<div class="tabpanel">';
    newProduct +=           'general info for new product.';
    newProduct +=       '</div>';
    newProduct +=       '<div class="tabpanel">';
    newProduct +=           'end user info product x.';
    newProduct +=       '</div>';
    newProduct +=   '</div>';
    newProduct += '</div>';
    $(".accordion").first().before(newProduct);
    updateDocument();
}
addProduct();
updateDocument();

【讨论】:

  • 我做不到!我必须先调用 updateDocument 以便初始化所有内容! addProduct 仅在之后(即)用户单击添加产品时调用!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多