2013-07-26 1 views
8

문서 (http://jquerymobile.com/demos/1.2.0/docs/api/events.html)에 따르면 jin 페이지의 모든 위젯과 플러그인이 실행 된 후에 pageinit 이벤트를 호출해야합니다. 그래서, 나는 이벤트 콜백에서 아무런 문제없이 해당 페이지의 요소와 상호 작용할 수 있어야한다고 생각합니다. 그러나, 나는 페이지의 버튼과 상호 작용을 시도 후 초기화 할 수있는 페이지에 대해 듣고, 나는 다음과 같은 오류 얻을 :jquery mobile error - 초기화하기 전에 버튼의 메소드를 호출 할 수 없습니다.

cannot call methods on button prior to initialization; attempted to call method 'disabled'

내가 함께 codepen을 넣어 한을 당신을 보여 :

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

무엇을 제공합니까? pageinit이 문서화 된대로 작동하지 않거나 버그입니까?

답변

24

pageinit 이벤트에 아무 문제가 없습니다. <a> 태그에 잘못된 내용이 있습니다.

당신이 얻고있는 오류를 제거하려면, 당신은 당신의 코드에 두 변경해야합니다 :

  1. 그것은하지 disabled 그 사용자의 호출 disable 방법 전에 disable
  2. , 당신은해야 button() 방법으로 전화하십시오. 따라서 button 요소를 초기화했을 것입니다. 이 작업을 수행 할 경우이 같은 오류가 발생합니다,

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

    을 :하지만

    Uncaught TypeError: Cannot call method 'addClass' of undefined

    범인을

이 코드가 지금처럼 보이게하는 방법입니다 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이됩니다.

그래서 나는 이 input[type=button]<button/> 유형의 요소에서만 작동하도록했습니다. 웬일인지 <a/> 단추를 가장하려고하면 예상대로 작동하지 않습니다. 나는 수동으로이 같은 요소에 ui-disabled 클래스를 추가하여 작업이있어 ​​:

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

데모 : http://jsfiddle.net/hungerpain/gzAHT/

+0

감사합니다 ... –

+1

이것은 여전히 ​​jQuery Mobile 1.4.5에 적용되는 것으로 보입니다. – Ken

0

당신이 특히 고생, 타의 추종을 불허하는 HTML 태그가 경우도 발생할 수는없는 </div>입니다 이전에 <div>이라고 선언되었습니다.

먼저 확인해야 할 것은 HTML이 잘 형성되어있을 수 있습니다.

관련 문제