Что потеряно во время clone () в jQuery? - PullRequest
1 голос
/ 31 августа 2009

HTML:

<div id="container">
    <select id="selector">
        <option value="">--</option>
        <option value="Service">Service</option>
        <option value="Sales">Sales</option>
        <option value="Marketing">Marketing</option>
        <option value="Finance">Finance</option>
        <option value="Engineering">Engineering</option>
        <option value="Management">Management</option>
    </select>
</div>
<input type="button" id="test" />

скрипт без clone (), работает нормально:

$('#test').click(function(){
    $('#container').find('select').each(function() {
        var $elem = $(this);
        var value = $elem.val();
        alert(value);
    });
});

скрипт с clone (), не работает:

$('#test').click(function(){
    $('#container').clone().attr('id', 'container2').find('select').each(function() {
        var $elem = $(this);
        var value = $elem.val();
        alert(value);
    });
});

1 Ответ

2 голосов
/ 31 августа 2009

Я не знаю, является ли это проблемой, но вы должны заметить, что при клонировании элемента <select> его выбранный элемент будет игнорироваться, если он был выбран пользователем. Чтобы обойти это, вы можете просто применить свойство selected DOM к любому выбранному параметру. Э.Г.

$('#test').click(function(){

    var selectMenus = $('#container').find('select');

    $('#container').clone().attr('id', 'container2').find('select').each(function(i) {

        /* See this: */
        $('option', this)[selectMenus[i].selectedIndex].selected = true;

        var $elem = $(this);
        var value = $elem.val();
        alert(value);

    });

});

РЕДАКТИРОВАТЬ: Я не уверен, что это кросс-браузерная проблема, но это, безусловно, влияет на FF3.5.

...