#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(‘скрыть’); } });`