jquery mobile error - 在初始化之前无法调用按钮上的方法; 试图调用方法'禁用'

mat*_*der 8 jquery-mobile

根据文档(http://jquerymobile.com/demos/1.2.0/docs/api/events.html),应该在执行jQuery移动页面的所有小部件和插件之后调用pageinit事件.所以,我相信我应该能够与该页面上的元素进行交互而不会在事件回调中肆无忌惮地进行交互.但是,我监听页面初始化,然后尝试与页面上的按钮进行交互,我收到以下错误:

在初始化之前无法调用按钮上的方法; 试图调用方法'禁用'

我已经把一个codepen放在一起,向你展示:

http://codepen.io/mattsnider/pen/mvcbD

是什么赋予了?pageinit是否无法正常工作或这是一个错误?

kri*_*ath 25

你的pageinit活动没有错.<a>标签中的错误在于.

要删除您遇到的错误,您必须对代码进行两处更改:

  1. 它不是disabled,它disable
  2. 在调用disable方法之前,你必须调用button()方法.因此,您将初始化button元素.

这就是代码现在的样子:

 $('#ageNext').button().button('disable');
Run Code Online (Sandbox Code Playgroud)

但是,如果你这样做,你会得到这样的错误:

未捕获的TypeError:无法调用未定义的方法'addClass'

罪魁祸首在于调用该disable方法的代码

disable: function() {
  this.element.attr( "disabled", true );
  this.button.addClass( "ui-disabled" ).attr( "aria-disabled", true ); 
  //^^ Uncaught TypeError: Cannot call method 'addClass' of undefined    
  return this._setOption( "disabled", true );
}
Run Code Online (Sandbox Code Playgroud)

你看到this.button那里?undefined如果元素不是真正的按钮,这将成为.

所以说,我disable 只有input[type=button]<button/>元素类型一起工作.出于某种原因,这在<a/>模拟按钮时无法正常工作.我通过手动向ui-disabled元素添加类来实现这一点,如下所示:

$(document).on('pageinit', '#age', function (e) {
    $('#ageNext').addClass('ui-disabled');
});
Run Code Online (Sandbox Code Playgroud)

演示:http://jsfiddle.net/hungerpain/gzAHT/