在document.ready()中工作的jQuery Mobile代码在document.bind(pageinit,..)中不起作用

时间:2013-05-27 20:37:06

标签: jquery jquery-mobile

我正在使用名为客户端验证(here)的Rails gem,其名称完全如其名称所示。 我注意到它只是第一次加载页面而不是再次运行,然后我意识到这是因为整个ajax加载的东西没有触发ready()事件。所以我切换了库的相关部分以使用pageinit,现在没有任何反应。我收到了警告消息,但验证没有触发。

针对不再有效的jQM调整的代码。

  // $(document).bind('pageinit', function() {
  //   alert(1)
  //   ClientSideValidations.disableValidators();
  //   return $(ClientSideValidations.selectors.forms).validate();
  // });

原始的“工作”代码。

 $(function() {
    alert(1)
    ClientSideValidations.disableValidators();
    return $(ClientSideValidations.selectors.forms).validate();
  });

除了这段代码之外,我没有更改任何其他内容。

2 个答案:

答案 0 :(得分:1)

尝试以下内容并查看

$(document).on('pageshow', function() {
   alert(1)
   ClientSideValidations.disableValidators();
   return $(ClientSideValidations.selectors.forms).validate();
});

如果您希望在第一次加载页面时触发它,请使用pagecreate,或者如果您希望每次刷新页面时都触发它,请使用pageshow

理想情况下,您可以将其设为特定于以下页面。让我们假设页面ID是testpage

$(document).on('pageshow', '#testpage', function() {
   alert(1)
   ClientSideValidations.disableValidators();
   return $(ClientSideValidations.selectors.forms).validate();
});

如果您坚持使用pageinit,请尝试按以下方式

$( "#testpage" ).on( "pageinit", function( event ) {
  alert( "This page was just enhanced by jQuery Mobile!" );
});

documentation is here

答案 1 :(得分:1)

当您在页面上时,您的网页组件尚未存在,因此您无法设置验证或尝试查找任何内容。它主要用于设置全局配置,变量和预配置。

正如Mayu所说,正确的方法是使用on with pageshow。