开发者

jQuery's Stylish-Select plugin doesn't work on elements created after page load

开发者 https://www.devze.com 2023-01-17 03:17 出处:网络
I\'ve been striving to use Stylish Select Box with elements created after page load without success. In order to understand the issue, you\'ll need to re-produce it first. I know the following might s

I've been striving to use Stylish Select Box with elements created after page load without success. In order to understand the issue, you'll need to re-produce it first. I know the following might seem a bit annoying but please continue reading if if you have 5 minutes of spare time.

Alternatively, you may obtain a completed example here to see the issue directly.

First, you'll need a <select> element. Now bind jquery.stylish-select.js to your <select> element using something like $('select').sSelect(); after that the script hides the <select> element and creates a set of DIVs underneath it. Now your page should look like this :

<select style="display:none;">
    <option>1</option>
    <option>2</option>
</select>
<div class=newListSelected>
    <!-- Some other stuff(not important). -->
</div>

Now add another <select> element to the same page with something like $('body').append('<select><option>1</option><option>2</option></select>')​ and use $(.newListSelected).remove(); t开发者_开发百科o delete the DIVs it created for the pervious ` option. Hope I'm sill clear enough.

After that you should have the following on the page :

<select style="display:none;">
    <option>1</option>
    <option>2</option>
</select>
<select>
    <option>1</option>
    <option>2</option>
</select>

Last, just call $('select').sSelect(); once more. It should create DIVs under both of your <select> elements. Now here's the problem, The first select box represented by the DIVs doesn't behave properly.

Alternatively, you may obtain a completed example here to see the issue directly.

Normally when you choose an option from the select box represented by the DIVs, it should update the original <select> element's selectedIndex (DOM property) to the corresponding index of the chosen option(0 for first option, 1 for the second.. etc). But if you look closely you'll see its changing selectedIndex value to -1 for any option.

As I'm really new to Javascript I really have no idea why its behaving like this. What I could only probably think of would be due to the first element being binded to $('select').sSelect; twice, thus causing DOM problems.


Here is what your JS should look like:

$(document).ready(function() {
    $('select').sSelect();

    $('.add').click(function() {
        var newSelect =$('<select><option>1</option><option>2</option></select>').appendTo('body');
        $(newSelect).sSelect();
    });

    $('.bind').click(function() {
        $('.newListSelected').remove();
    });
});​

The trick is to use appendTo instead of append. That will return the newly created select, so you can use .sSelect() on it.


reset Stylish Select function

$('select').resetSS();


use resetSS() function after manipulating your select options.

$('#sel2').sSelect();

function refresh_select(id){
    $.getJSON("/ajax.php?cat="+id, function(data){
        $("select#sel2").loadSelect(data);    
        $("select#sel2").resetSS();
    });
});


i think you cant just simply delete the div. why can you not undo the sSelect thing? i'm sure there is a destroy option or remove or whatever, so remove the sSelect properly, then try again :)


u have to call the sSelect function once more after creating the elements

$(document).ready(function(){
    $('select').sSelect();
});

$('.add').click(function() {
    $('body').append('<select><option>1</option><option>2</option></select>')
   $('select').sSelect();
});

$('.bind').click(function() {
    $('.newListSelected').remove();
    $('select').sSelect();
});
0

精彩评论

暂无评论...
验证码 换一张
取 消