2013-07-26 47 views
8

根據文檔(http://jquerymobile.com/demos/1.2.0/docs/api/events.html),pageinit事件應該在jQuery移動頁面的所有小部件和插件被執行後調用。所以,我相信我應該能夠與該頁面上的元素進行交互,而不會在事件回調中逍遙法外。不過,我聽的頁面初始化,然後嘗試與網頁上的按鈕交互,並且我得到以下錯誤:jquery移動錯誤 - 無法在初始化之前調用按鈕上的方法;試圖調用方法'禁用'

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
  2. 您的通話disable方法之前,你必須請撥打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

這樣說,我已經得到disable僅適用於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格式良好。

相關問題