8

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

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

我整理了一个codepen,向您展示:

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

是什么赋予了?pageinit 没有按文档说明工作还是这是一个错误?

4

2 回答 2

25

你的活动没有问题pageinit。错误在于<a>标签。

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

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

这就是代码现在的样子:

 $('#ageNext').button().button('disable');

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

未捕获的类型错误:无法调用未定义的方法“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 );
}

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

也就是说,我disable 只能处理元素类型。出于某种原因,这在模拟按钮时无法按预期工作。我已经通过手动向元素添加类来实现这一点,如下所示:input[type=button]<button/><a/>ui-disabled

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

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

于 2013-07-26T06:37:57.833 回答
0

如果您有不匹配的 HTML 标签,也可能会发生这种情况,尤其是</div>没有先前声明的<div>.

首先要检查的可能是您的 HTML 格式正确。

于 2017-05-15T13:09:28.207 回答