Менять имя attr клонированного входного элемента в jQuery не работает в IE6/7

Эта SSCCE заявляет все это:



    
        Test
        
        
    
    
        

    

Copy'n'paste'n'run это, нажмите Add нажимайте на кнопку несколько раз. При каждом щелчке необходимо видеть HTML-код

    обнаружиться в
     и ожидаемый код должен примерно быть:

  • Это работает как ожидалось в FF, Chrome, Safari, Opera и IE8.

    Однако IE6/7 перестал работать в изменении name припишите и производит как:

  • Я погуглил немного и нашел эту очень похожую проблему, он зафиксировал ее и отправил фрагмент кода, как она должна иметь, похожи. К сожалению, это точно, что я уже сделал, таким образом, я подозреваю, что он только тестировал в IE8, не в IE6/7. Кроме той конкретной темы Google не показал много.

    Какое-либо понимание? Или сделайте я действительно должен захватить назад к document.createElement?

    Примечание: Я знаю, что могу использовать просто то же название каждого входного элемента и получить их как массив, но вышеупомянутое является просто основным примером, в реальном мне действительно нужно было изменить атрибут имени, потому что это не только содержит индекс, но также и другую информацию, такую как parentindex, упорядочивание, и т.д. Это использовалось для добавления/перестраивания/удаления (sub) пунктов меню.

    Править: это связано с этой ошибкой, jQuery (я использую 1.3.2), таким образом кажется, не создает исходные данные тот путь? Следующее действительно просто работает:

    $('#add').click(function() {
        var ul = $('#ul');
        var liclone = ul.find('li:last').clone(true);
        var oldinput = liclone.find('input');
        var name = oldinput.attr('name').replace(/(foo\[)(\d+)(\])/, function(f, p1, p2, p3) {
            return p1 + (parseInt(p2) + 1) + p3;
        });
        var newinput = $('');
        oldinput.replaceWith(newinput);
        liclone.appendTo(ul);
        $('#showsource').text(ul.html());
    });
    

    Но я не могу предположить, что я - единственный, кто встретился с этой проблемой с jQuery. Даже простое $('').attr('name', 'foo') не работает в IE6/7. JQuery как не является crossbrowser библиотекой, которая, как предполагают, охватила эту конкретную проблему под капотами?

23
задан Kara 14 January 2014 в 16:12
поделиться

3 ответа

Не ответа, является анализом к вопросу, задаваемым:

<!doctype html>
<html lang="en">
    <head>
        <title>Test</title>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
        <script type="text/javascript">
            $(document).ready(function() {
                $('#add').click(function() {
                    var ul = $('#ul');

                    var liclone1 = ul.find('li:last').clone(true);
                    var liclone2 = ul.find('li:last')[0].cloneNode(true);
                    var liclone3 = $( ul.find('li:last')[0].cloneNode(true) );
                    var liclone4 = $( '<li><input type="text" name="foo[88]"></li>' );

                    var linew    = document.createElement("li"); 
                    linew.innerHTML = '<input type="text" name="foo[99]">';

                    $('#showsource').text("");
                    $('#showsource').text($('#showsource').text() + $(liclone1)[0].outerHTML);
                    $('#showsource').text($('#showsource').text() + $(liclone2)[0].outerHTML);
                    $('#showsource').text($('#showsource').text() + $(liclone3)[0].outerHTML);
                    $('#showsource').text($('#showsource').text() + $(liclone4)[0].outerHTML);
                    $('#showsource').text($('#showsource').text() + $(linew)[0].outerHTML);
                    $('#showsource').text($('#showsource').text() + $(ul)[0].outerHTML);
                    $('#showsource').text($('#showsource').text() + $(ul)[0].innerHTML);

                });
            });
        </script>
    </head>
    <body>
        <ul id="ul">
            <li><input type="text" name="foo[0]"></li>
            <li><input type="text" name="foo[1]"></li>
        </ul>
        <button id="add">Add</button>
        <pre id="showsource"></pre>
    </body>
</html>

Результат:

<LI><INPUT name=foo[1]> 
<LI><INPUT name=foo[1]> 
<LI><INPUT name=foo[1]> 
<LI><INPUT name=foo[88]></LI>
<LI><INPUT name=foo[99]></LI>
<UL id=ul><LI><INPUT name=foo[0]> 

<LI><INPUT name=foo[1]> </LI></UL><LI><INPUT name=foo[0]> 
<LI><INPUT name=foo[1]> </LI>

Итак, я могу проанализировать его, единственный способ - сделать новый Li с помощью CreateeEdeeDement или создать новую объект с $ (...)

2
ответ дан 29 November 2019 в 02:56
поделиться

Это сообщение также посвящено этой теме, которое дало мне понимание этой проблемы.

Странное поведение атрибута iframe `name`, установленного jQuery в IE

2
ответ дан 29 November 2019 в 02:56
поделиться

Интересно, столкнулись ли вы с этой ошибкой в ​​IE (даже с jQuery)?

По сути, в IE вы не можете изменить атрибут имени элементов (обычных или клонированных) (а затем повторно получить к ним доступ через javascript по имени), хотя вы можете отправить их (например, элементы ввода) и успешно отправить их.

3
ответ дан 29 November 2019 в 02:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: