在document.ready()中工作的jQuery移动代码在document.bind(pageinit,…)中不工作

在document.ready()中工作的jQuery移动代码在document.bind(pageinit,…)中不工作,jquery,jquery-mobile,Jquery,Jquery Mobile,我正在使用一个名为Client-Side-Validations()的Rails gem,它完全按照它的名字来做。 我注意到它只是在第一次加载页面时才起作用,而不是再次加载,然后我意识到这是因为整个ajax加载过程没有触发ready()事件。所以我将库的相关部分切换为使用pageinit,现在什么也没发生。我收到了警报消息,但验证没有启动 为不再工作的jQM调整的代码 // $(document).bind('pageinit', function() { // alert(1)

我正在使用一个名为Client-Side-Validations()的Rails gem,它完全按照它的名字来做。 我注意到它只是在第一次加载页面时才起作用,而不是再次加载,然后我意识到这是因为整个ajax加载过程没有触发ready()事件。所以我将库的相关部分切换为使用pageinit,现在什么也没发生。我收到了警报消息,但验证没有启动

为不再工作的jQM调整的代码

  // $(document).bind('pageinit', function() {
  //   alert(1)
  //   ClientSideValidations.disableValidators();
  //   return $(ClientSideValidations.selectors.forms).validate();
  // });
原始的“工作”代码


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

请尝试下面的代码并查看

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

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


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

谢谢!为什么“pageinit”不起作用?据文档所述,它是.ready()的替代品。据我所知,
pageinit
用于设置全局配置细节,如加载程序的主题等。因此,无论何时需要jQM上的“ready”事件,都可以使用“pageshow”?因为
ready
pageshow
的工作方式不同,我不能说我用它来代替它。但我可以说,如果我希望每次在浏览器上加载DOM时都触发事件和事件,那么我会使用
pageshow
$( "#testpage" ).on( "pageinit", function( event ) {
  alert( "This page was just enhanced by jQuery Mobile!" );
});