форма jquerymobile не работает должным образом в мобильных браузерах, но работает в браузерах для настольных компьютеров?

#jquery-mobile

#jquery-mobile

Вопрос:

У меня возникла проблема с тем, что моя форма jqm не работает должным образом в мобильных браузерах (Safari для iPad 1, Android Dolphin), но работает должным образом в браузерах для настольных компьютеров (Chrome, Firefox, Safari и IE9 на Win7).

Форма начинается с запроса пользователя, как бы он хотел, чтобы с ним связались (электронная почта, sms и / или post), затем обновляет поля, которые должны быть обязательными, на основе этого выбора (проверка осуществляется с помощью validationEngine.js плагин).

Пример формы можно увидеть здесь.

Логика скрипта заключается в том, что он проверяет, установлен ли флажок (или снят), затем добавляет (или удаляет) класс, чтобы сделать его обязательным, как показано ниже.

 $('body').delegate('#byEmail_label', 'click tap', (function(event) {
  if (!$("#byEmail").is(":checked")) 
   {    
        $('#req_email').addClass('reqField');
        $('#email').addClass("validate[required,custom[email]]");
  }
  else
   { 
        $('#req_email').removeClass('reqField');
        $('#email').removeClass("validate[required,custom[email]]").validationEngine('hide');   
  }
})
);
  

У меня это работало на 100% без .delegate(), но тогда я не смог загрузить форму через ajax — после добавления .делегирование все это работает хорошо, за исключением мобильных браузеров.

Кто-нибудь сталкивался с чем-то подобным или имеет какие-либо идеи, как я могу заставить это работать?

Спасибо

Ответ №1:

Наконец-то исправлена моя собственная проблема, переместив весь мой jquery за пределы

  $(document).ready(function () {...
  

и в

 $('*').delegate('body','pagecreate', function(){...
  

ie:

 $('*').delegate('body','pagecreate', function(){
  $('#byEmail_label').tap(function(event) {
    if ($("#byEmail").is(":checked"))
     {
    $('#req_email').addClass('reqField');
    $('#email').addClass("validate[required,custom[email]]");
     }
     else
     {
    $('#req_email').removeClass('reqField');
    $('#email').removeClass("validate[required,custom[email]]").validationEngine('hide');
     }
  });
});
  

Теперь моя голова чувствует себя лучше… больше не нужно стучать ею по столу…

Ответ №2:

У меня также были проблемы с флажками и переключателями, это то, что я использовал. Может помочь проверить значение, а не установлено ли оно.

 alert($('input[name=byEmail]:checked').val());
  

или

 var cb_val = $('input[name=byEmail]:checked').val() == true;
  

или

 var cb_val = ($('input[name=byEmail]:checked').val() == 'blah') ? true:false;
  

Может быть, что-то вроде этого

 var addValidation = ($('input[name=byEmail]:checked').val() != '') ? true:false;

if(addValidation) {    
    $('#req_email').addClass('reqField');
    $('#email').addClass("validate[required,custom[email]]");
} else { 
    $('#req_email').removeClass('reqField');
    $('#email').removeClass("validate[required,custom[email]]").validationEngine('hide');   
}
  

Комментарии:

1. Спасибо за ваш ответ, Филл, досадно, что код отлично работает без . делегат () и загрузка страницы ajax. ie. ` $(‘#byEmail_label’).tap(функция (событие) { if ($(«#byEmail»).is(«:проверено»)) { $ (‘#req_email’).addClass(‘reqField’); $ (‘#email’).addClass(«проверка [требуется,пользовательское [электронное письмо]]»); } else { $ (‘#req_email’). removeClass(‘reqField’); $(‘#email’).removeClass(«проверить [обязательно,пользовательский[email]]»).validationEngine(‘скрыть’); } });`