Попытка заставить некоторые функции jQuery работать в порядке.Является ли обратный вызов проблемой? - PullRequest
0 голосов
/ 03 октября 2011

Я пытаюсь сделать что-то по порядку, и у меня возникают проблемы.

  1. Когда нажата кнопка с идентификатором #sub_button,
  2. Убедитесь, что у каждого элемента класса ".verify" есть собственное значение объекта (см. Код) ...
  3. ... если нет, размыть этот элемент (запустим какой-то другой код и создадим для него объект).
  4. ПОСЛЕ того, как вышеупомянутая проверка ЕСЛИ ЗАВЕРШЕНА (теперь все элементы должны иметь объект), ТО запускает функцию "isitgood". (Функция isitgood работает до того, как все элементы получат свои значения объектов, что делается при размытии)

    $("#sub_button").click(function() {
    
        $(".verify").each(function(){
    
            objtitle = $(this).attr('id');
    
            if (!myObj[objtitle]) { 
    
            $("#"+objtitle).blur(); // Define anything undefined
    
            }
    
    
        }); // end each
    
    isitgood();
    
    }); // end click function
    
    function isitgood(){
    
        if (myObj.login_id == "ok" && myObj.email == "ok")  {
    
        // submit the form
    
        } else {
    
        // shows error
    
        }
    
    }
    

Кроме того, как только я получу это выполнение в правильном порядке, было бы неплохо сделать какой-то цикл .each, чтобы проверить, все ли значения объекта == "ok", вместо того, чтобы указывать все их в функции. Все имена объектов (т. Е. Login_id, email) являются идентификатором attr любого элемента с именем класса .verify.

Ответы [ 2 ]

0 голосов
/ 03 октября 2011

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

var sub_buttons = $("#sub_button");
sub_buttons.click(function() {

    $(".verify").each(function(index){

        objtitle = $(this).attr('id');

        if (!myObj[objtitle]) { 

        $("#"+objtitle).blur(); // Define anything undefined

        }

        if (index == sub_buttons.length - 1)
            isitgood();
        }

    }); // end each

}); // end click function

Это проверит, находитесь ли вы на последнем элементе объекта jQuery, и если это так, запустит функцию isitgood(). Таким образом, перед выполнением isitgood()

убедитесь, что вы покончили с методом $.each
0 голосов
/ 03 октября 2011

Javascript является асинхронным.Ваш isitgood() всегда будет стрелять, пока .each все еще делает свое дело.

Тем не менее, из вашего кода не ясно, чего вы пытаетесь достичь.То, как вы используете .each, похоже, указывает на то, что у вас есть несколько одинаковых атрибутов ID в ваших тегах.Это не сработает, идентификаторы должны быть уникальными.Также вы, кажется, смешиваете jQuery и обычный Javascript.Используйте один или другой.На самом деле просто используйте jQuery, вы сэкономите время и силы!

Если у вас есть уникальные идентификаторы, тогда вам вообще не нужен .each.Просто проверьте соответствующие идентификаторы с вашим оператором if.

Пожалуйста, предоставьте больше вашего кода, и я могу обновить его с лучшим ответом.Например, как выглядит myObj?Как его элементы получают значение ok?Кажется, в вашем звонке не установлено значение .each().

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