jQuery Скрыть элемент и isVisible выпуск - PullRequest
3 голосов
/ 21 января 2011

Я в основном пытаюсь сделать проверку формы.Все работает отлично.За исключением одного.Во-первых, вот мой код:

        $('#submit_btn').click(function(){  

        $("input:not([type=radio],[type=checkbox])").each(function() {
                if ($(this).val() == ""){
                 $('#'+$(this).attr("name")+'_error').show("");
                }
                else{
                   $('#'+$(this).attr("name")+'_error').hide("normal");
                }

            });
            if(!($("div[id$=error]").is(":visible")))
                               alert("a");

        });

После нажатия кнопки отправки он проверяет входные данные, которые не являются переключателями или флажками.И если вход пуст, это показывает ошибку.

Если вводится какой-либо ввод, ошибка становится скрытой.

В конце я проверяю, отображается ли какое-либо сообщение об ошибке, если нет - отправляю форму.

Моя проблема в том, что я скрываю сообщение об ошибке с небольшой анимацией с помощью .hide ("нормальный").Поэтому я считаю, что в процессе сокрытия последнего сообщения об ошибке выполняется мой последний оператор if, и он думает, что есть видимое сообщение об ошибке (однако это было в процессе скрытия)

Как я могу выполнить мойесли утверждение после того, как процесс скрытия завершен?

В моем случае, когда не осталось сообщения об ошибке, я получаю предупреждение после другого нажатия кнопки отправки.

Я хотел бы, чтобы у меня было ясное мнение о моемвопрос.Если нет, я постараюсь переписать его.

Спасибо!

Ответы [ 2 ]

5 голосов
/ 21 января 2011

Делать это с :visible немного глупо и определенно медленно.Вместо этого используйте переменную:

$('#submit_btn').click(function(){  
    var error = false;

    $("input:not([type=radio],[type=checkbox])").each(function() {
        if ($(this).val() == ""){
            $('#'+$(this).attr("name")+'_error').show(400);
            error = true;
        }
        else{
            $('#'+$(this).attr("name")+'_error').hide(400);
        }
    });
    if(error)
        alert("a");

});
0 голосов
/ 21 января 2011

Если ваша цель - показать предупреждающее сообщение после завершения анимации функции .hide("normal"), то вам нужно передать функцию "обратного вызова" в качестве аргумента функции .hide(). См. Документацию .

См. Пример здесь:

$('#submit_btn').click(function(){  
  $("input:not([type=radio],[type=checkbox])").each(function() {
    if ($(this).val() == ""){
      $('#'+$(this).attr("name")+'_error').show("");
    }
    else{
      $('#'+$(this).attr("name")+'_error').hide("normal", function() {

        // This function will be executed when the "normal" animation is complete

        if(!($("div[id$=error]").is(":visible")))
          alert("a");

      });
    }
  });
});

Мои 2 цента ... Я скажу, что вы могли быхочу выслушать всеобщее поощрение за поиск элегантного плагина для проверки формы.

...