jquerymobile表单在移动浏览器上无法正常工作,但适用于桌面浏览器?

时间:2011-04-11 00:14:48

标签: jquery-mobile

我遇到的问题是我的jqm表单在移动浏览器(iPad 1 Safari,Android Dolphin)中无法正常工作,但在桌面浏览器(Win7上的Chrome,Firefox,Safari和IE9)中正常工作。

表单首先询问用户他们希望如何联系(电子邮件,短信和/或发布),然后根据此选择更新要求的字段(验证是通过validationEngine.js插件进行的)。 / p>

表单的示例可以是seen here

脚本的逻辑是检查复选框是否被选中(或取消选中),然后添加(或删除)一个类以使其成为必需,如下所示。

$('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');   
  }
})
);

我在没有.delegate()的情况下100%工作,但是后来我无法通过ajax加载表单 - 添加.delegate后,除移动浏览器外,一切正常。

有没有人经历过类似的事情,或者知道如何才能让它发挥作用?

由于

2 个答案:

答案 0 :(得分:1)

最后通过将所有jquery移到

之外来解决我自己的问题
 $(document).ready(function () {...

并进入

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

即:

$('*').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');
     }
  });
});

现在我的脑袋感觉更好......不再在桌子上敲打它......

答案 1 :(得分:0)

我也遇到过复选框和收音机的麻烦,这就是我用过的东西。可能有助于检查值,而不是检查它。

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');   
}