1

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);
    });
});
4

1 に答える 1

2

これが問題であるかどうかはわかりませんが、<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には確かに影響します。

于 2009-08-31T13:26:02.803 に答える