将JQuery插件应用于使用each()通过AJAX插入DOM的新元素

时间:2013-10-21 18:51:34

标签: ajax jquery

我正在使用JQuery插件customSelect() http://adam.co/lab/jquery/customselect/来设置下拉框的样式。

如果我在同一个元素上多次初始化脚本,它们将停止工作。我需要找到一种方法来只对通过AJAX插入到DOM中的新创建元素初始化插件。

所以,我在所有下拉菜单(期望的效果)上初始化它 -

$('select').customSelect();

和我选择此插件工作的元素被赋予一个“hasCustomSelect”类,如此

<select class="hasCustomSelect"></select>

但如果我初始化两次 -

$('select').customSelect();
$('select').customSelect();

它将完全停止工作。

所以,在我的AJAX请求中,我初始化了没有该类的元素,但它似乎没有工作。这是AJAX -

$.ajax({
    type: 'POST',
    url: 'wp-content/themes/themetitle/functions/get-child.php',
    data: { childID : theID, URL : theURL, classlevel : classlevel },
        beforeSend:function() {

        },
        success:function(data) {
            $('#makesort').append(data); 
            makesort(); 
            $.each('select', function() {
                if( $(this).hasClass('hasCustomSelect') ) {
                    //DO NOTHING!  
                } else {
                    $(this).customSelect(); 
                }
            });
        },
        error:function() {

        }   
    }); 

所以,我的想法是在data附加到我的div后,我将浏览每个<select>元素,确定它是否已包含类{{1}如果没有,则初始化此元素的插件。

然而,这似乎并没有产生预期的效果,事实上,它产生了一个错误。可能有几种方法可以查看是否已经应用了插件,但我想查看是否已经添加的默认类就足够了。

1 个答案:

答案 0 :(得分:1)

为您的每一个尝试:

$('select:not(.hasCustomSelect)').each(function() {
    $(this).customSelect(); 
});

...或

$.each($('select:not(.hasCustomSelect)'), function() {
    $(this).customSelect();
});

您收到错误的原因是因为$.each(...的第一个参数是对象的集合,而不是选择器。