JQuery селектор "память" - PullRequest
       6

JQuery селектор "память"

1 голос
/ 13 октября 2010

У меня есть форма с несколькими полями, и каждый раз, когда пользователь меняет поле, форма отправляется (через скрытый iframe), и ответ помещается в соответствующий div на странице посредством обратного вызова.В первый раз это работает нормально.Но при каждом последующем изменении и отправке поля ответ отображается в каждом элементе div, заполненном ответом (поэтому все они показывают одно и то же, а не желаемое поведение).

Может кто-нибудь сказать мне, почему этоэто происходит?Кажется, что некоторые селекторы, которые были вызваны ранее (с момента загрузки последней страницы), сохраняются ... но я не уверен.Вот мой код:

$(function ()
{
    $('#ImageAddForm input').change(function (){
        form = $('#ImageAddForm');

        var fldDiv = $(this).parent().attr('id'); // eg Image11
        var thDiv = fldDiv.replace('Image', 'Thumb'); // eg Thumb11

        $(form).iframePostForm({  
            post : function (){
                var msg = 'Uploading file...';
                $("#" + thDiv).html(msg);
            },
            complete : function (response){
                $("#" + thDiv).html(response);
                $(':input', '#ImageAddForm').not(':hidden').val('');
            }
        });

        form.submit();
    });
});

1 Ответ

2 голосов
/ 13 октября 2010

Я не знаком с этим плагином, но у меня есть подозрения о том, что может быть причиной вашей проблемы. Вы добавляете некоторую функциональность к своей форме с помощью плагина внутри события изменения. Это означает, что к каждому изменению вы присоединяетесь снова, что может вызвать некоторые проблемы. Два решения предлагают себя:

1) Если в плагине есть какой-то вызов для отмены связывания или уничтожения самого себя, вызовите это прямо перед тем, как подключить плагин к форме. Это должно предотвратить любое странное поведение, вызванное множественным связыванием.

2) Лучшее решение: свяжите плагин с формой вне вашего события изменения и поместите ваши переменные (fldDiv, tdDiv) так, чтобы они были доступны обоим вашим событием изменения (чтобы их можно было изменить на основе что изменилось) и функции, используемые плагином (для публикации и завершения). Таким образом, вы будете связывать плагин только один раз, но сможете передавать и получать разные данные в зависимости от того, какое поле изменилось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...