Скриптът за качване работи с jQuery v1.3.2, но не и с 1.6.2

Бих искал да използвам този скрипт за качване на множество файлове с jQuery v1.6.2. Работи добре с всяка версия =‹ 1.3.2, но не и с 1.4.x или по-нова.

Можете ли да ми помогнете да го накарам да работи с 1.6.2?

когато избера 3 файла за качване, тогава премахвам първия; всички полета за въвеждане на 2-ри и 3-ти файл също бяха премахнати. :(

(С jQuery v1.3.2 2-ри и 3-ти не се премахват.)

HTML:

<input type="file" class="upload" name="fileX[]" />
<div id="queue" class="queue"></div>

JavaScript:

$(document).ready(function () {

    $("input.upload").change(function () {
        validateFile(this);
    });


    function validateFile(myelement) {

        //$(myelement).hide();//disabled to test

        $(myelement).parent().prepend('<input type="file" class="upload" name="fileX[]" />').find("input").change(function () {
            validateFile(this)
        });
        var elementval = myelement.value;
        if (elementval != '') {
            $("#queue").append('<div>' + elementval + '&nbsp;&nbsp;<a class="remove">X</a></div>').find("a").live('click', function () {
                $(this).parent().remove();
                $(myelement).remove();
                return true;
            });
        }
    };

});

person pobela76    schedule 20.07.2011    source източник
comment
Опитайте да замените .live() с .bind()?   -  person Zomxilla    schedule 20.07.2011
comment
jQuery не приема сериозно поддържането на обратна съвместимост между версиите. Вашите опции основно са да пренесете кода към най-новата версия или да продължите да използвате по-старата версия.   -  person aroth    schedule 20.07.2011
comment
Опитах .live() и .blind(), но все още не работи. бих искал да го пренеса към последната версия (1.6.2), защото имам други скриптове, които не работят с 1.3.2   -  person pobela76    schedule 20.07.2011
comment
Можете ли да ни дадете съобщението за грешка от конзолата на браузъра? Може да има нещо общо с .value срещу .val().   -  person nren    schedule 20.07.2011
comment
пробвах var elementval = $(myelement).val(); и var elementval = myelement.val(); но все пак получих същия резултат. в конзолата на браузъра, няма съобщение за грешка.   -  person pobela76    schedule 20.07.2011
comment
опитайте го на jsfiddle.net/NkS5R . Не съм сигурен кои части не работят   -  person Emil    schedule 20.07.2011


Отговори (1)


Все още не мога да разбера защо премахва всички входове. Мога само да си представя, че това е свързано с това, че променливата myelement е обвързана със събитието с кликване на живо. Използваме повторно тази променлива всеки път, когато се извика функцията за промяна на входа, и не съм сигурен как jQuery се справя с това с тези <a> кликвания. Мисля да се поразровя.

Все пак измислих заобиколно решение.

Вместо да съхранявам елемента вътре в събитието на живо, обвързано с <a>, дадох входа и div data-id на опашката. Така че, когато се щракне върху #queue a, той съвпада с вход със свой собствен идентификатор на данни:

$(document).ready(function () {
    var count = 0;
    $('input.upload').live('change', function() {
        $(this).parent().prepend('<input type="file" class="upload" name="fileX[]" />');
        $(this).attr('data-id', count);
        $('#queue').append('<div data-id="' + count + '">' + $(this).val() + '&nbsp;&nbsp;<a class="remove">X</a></div>');
        count++;
    });
    $('#queue div a').live('click', function() {
        $('input[data-id="' + $(this).parent().attr('data-id') + '"]').remove()
        $(this).parent().remove();
    });
});         
person nren    schedule 20.07.2011
comment
Защитаваш деня ми, заобиколното ти решение работи. Благодаря ти много! - person pobela76; 20.07.2011