Проверка JQuery с диалоговым окном - PullRequest
0 голосов
/ 15 апреля 2010

У меня есть диалоговое окно jquery, которое всплывает и принимает данные пользователя через форму. Как только пользователь закончил, он / она нажимает кнопку «ОК». В этом диалоговом окне есть несколько «вкладок», так что при нажатии «ОК» мы хотим проверить все данные, представленные на каждой вкладке. Если что-то неверно, мы берем пользователя на эту вкладку и говорим ему, что не так.

Однако для этого требуется 2 нажатия кнопки «ОК». Вот оскорбительный jquery:

if(errors){
  // display the tab with the error            
  jQuery('#recording_tabs > div').each( function(i){
      alert('we are here');
      if(jQuery(this).find('*').not('label').hasClass('invalid')){
          jQuery('#recording_tabs').tabs('option','selected', i);
          return false;// prevent further processing
      }
  });
}

Итак, что происходит в приведенном выше коде, так это то, что когда мы нажимаем «ОК», мы получаем предупреждение «мы здесь» для каждого элемента (вкладки), а затем ничего не происходит. Повторное нажатие кнопки «ОК» дает нам предупреждение «мы здесь» до тех пор, пока мы не попадем на вкладку с ошибками.

Так что, очевидно, первый раз во внутреннем операторе if ложно для каждой вкладки, что, вероятно, означает, что jQuery не зарегистрировал «недопустимые» классы во времени. Поэтому я пробовал пустое выражение each () прямо перед основным в надежде, что это решит проблему

jQuery('#recording_tabs > div').each( function(i){} );

Но я получил тот же результат.

Может ли кто-нибудь определить, что мне не хватает?


Спасибо за ответ. Кажется, я уже использую invalidHandler. Вот полный окружающий код (я этого не писал):

someForm.validate( {
    errorClass: "invalid",
    invalidHandler : function( e, validator){
        var errors = validator.numberOfInvalids();
        var msg = jQuery( "#message", someForm );
        if(errors){
            // display the tab with the error            
            jQuery('#recording_tabs > div').each( function(i){
                if(jQuery('.invalid:not(label)', this).length){
                    jQuery('#recording_tabs').tabs('option','selected', i);
                    return false;// prevent further processing
                }
            });
        }
        else{
            msg.hide();
        }
    },
    rules: { ... //blah }
});

И это называется через:

someDialog.dialog({
    //... blah
    buttons: {
        'Cancel' : function(){
            jQuery(this).dialog('close');
            },
        'Ok' : function(){
                var valid = someForm.validate().form();
                if( valid ){
                    jQuery(this).dialog('close');
                    //....
                }
            }
    }
});

У меня та же проблема.

1 Ответ

0 голосов
/ 15 апреля 2010

Это будет работать, если вы используете функцию invalidHandler, доступную в плагине проверки, например:

jQuery("#myForm").validate({
    invalidHandler: function(form, validator) {
      jQuery('#recording_tabs > div').each( function(i){
        if(jQuery('.invalid:not(label)', this).length){
            jQuery('#recording_tabs').tabs('option','selected', i);
            return false;
        }
      });
    }
});

invalidHandler запускается только при наличии ошибок и после применения классов, поэтому он будет корректно переходить на вашу вкладку с элементом class="invalid", который не является меткой.

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