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

时间:2013-07-26 06:19:04

标签: jquery-mobile

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

  

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

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

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

是什么给出的? pageinit是否无法正常工作,或者这是一个错误吗?

2 个答案:

答案 0 :(得分:25)

您的pageinit活动没有任何问题。错误在于<a>标记。

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

  1. 不是disabled,而是disable
  2. 在致电disable方法之前,您必须调用button()方法。因此,您将初始化button元素。
  3. 这就是代码现在的样子:

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

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

      

    未捕获的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 );
    }
    

    你看到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/

答案 1 :(得分:0)

如果您有不匹配的HTML标记,也可能会发生这种情况,尤其是在没有先前声明的</div>的情况下遇到麻烦<div>

要检查的第一件事可能是您的HTML格式正确。