2011-05-03 97 views
63

這是針對jQuery Mobile的。並非所有常規的jQuery答案都可以使用。禁用jQuery Mobile中的按鈕

我無法讓我的按鈕在jQuery Mobile中禁用。

jQuery Mobile的說,使用

$('input').button('disable'); 

但我得到在Firebug的錯誤消息:

未捕獲的異常:不能調用按鈕的方法來初始化之前;試圖調用方法'禁用'。

它在我的頁面的文檔就緒部分,所以我不知道它還沒有被初始化。

我試着直接通過它的ID來調用按鈕,但那不起作用。

我已經試過:

$('button').attr("disabled", "disabled"); 

不工作。

我也有一個開關命令,將啓用一個基於什麼值的按鈕。我已經找到了路由到右「case」語句的地方,但jQuery mobile中的啓用/禁用按鈕不起作用。

代碼:http://pastebin.com/HGSbpAHQ

+2

HTM L請 - 看起來像選擇器是錯誤的。 – xandercoded 2011-05-03 20:07:56

+0

選擇器看起來一般,但我們必須知道你有''或'' – Dutchie432 2011-05-03 20:09:52

+0

我們需要看到您的HTML作爲亞歷山大說 – slandau 2011-05-03 20:12:12

回答

106

UPDATE:

因爲這個問題仍然得到很多次,我也將當前文檔JQM有關如何禁用按鈕:

更新實例:

啓用啓用廣告isabled表單按鈕

$('[type="submit"]').button('enable'); 

禁用禁用表單按鈕

$('[type="submit"]').button('disable'); 

刷新更新表單按鈕
如果通過 JavaScript操作表單按鈕,y ou必須調用刷新方法來更新 視覺樣式。

$('[type="submit"]').button('refresh'); 

原貼下面:

直播示例:http://jsfiddle.net/XRjh2/2/

UPDATE:

使用下面@naugtur例如:http://jsfiddle.net/XRjh2/16/

更新#2:

鏈接按鈕,例如:

JS

var clicked = false; 

$('#myButton').click(function() { 
    if(clicked === false) { 
     $(this).addClass('ui-disabled'); 
     clicked = true; 
     alert('Button is now disabled'); 
    } 
}); 

$('#enableButton').click(function() { 
    $('#myButton').removeClass('ui-disabled'); 
    clicked = false; 
}); 

HTML

<div data-role="page" id="home"> 
    <div data-role="content"> 

     <a href="#" data-role="button" id="myButton">Click button</a> 
     <a href="#" data-role="button" id="enableButton">Enable button</a> 

    </div> 
</div> 

注: - http://jquerymobile.com/demos/1.0rc2/docs/buttons/buttons-types.html

類似按鈕的鏈接具有與真實 下面的基於窗體的按鈕相同的視覺選項,但有一些重要區別。 基於鏈接的按鈕不是按鈕插件的一部分,只是使用 底層的buttonMarkup插件來生成按鈕樣式,所以不支持表單按鈕方法(啓用,禁用,刷新)的 。 如果您需要禁用基於鏈接的按鈕(或任何元素),則可以使用 將自己禁用的禁用類與 JavaScript自己一起應用,以實現相同的效果。

+0

你用jquery運行這個例子。它不適用於我的應用程序與jquery移動 – swg1cor14 2011-05-03 20:53:49

+1

我給的例子是使用jQM框架,並禁用按鈕,請參閱button2。如果你可以發佈更多的代碼,確切地說你如何創建和禁用該按鈕,肯定會幫助你給出一個很好的答案 – 2011-05-03 21:00:12

+0

http://pastebin.com/u/swg1cor14 – swg1cor14 2011-05-03 21:10:47

2

嘗試以下語句之一:

$('input[type=submit]').attr('disabled','disabled');

$('input[type=button]').attr('disabled','disabled');

UPDATE

要針對特定​​的按鈕,給你提供的HTML:

$('div#DT1S input[type=button]').attr('disabled','disabled');

http://jsfiddle.net/kZcd8/

+0

不是。這些工作都沒有 – swg1cor14 2011-05-03 20:44:57

+0

鑑於你在評論中提供的代碼 - 檢查提供的jsfiddle鏈接http://jsfiddle.net/kZcd8/ – xandercoded 2011-05-03 20:51:29

4

如果我正確地閱讀這個問題,你可能缺少的是一個jQuery移動「按鈕」窗口小部件與HTML按鈕元素不同。我認爲這可以歸結爲你不能調用$('input').button('disable'),除非你先前調用$('input').button();來初始化你的輸入上的jQuery Mobile按鈕小部件。

當然,您可能不希望使用jQuery按鈕小部件功能,在這種情況下,亞歷山大的答案應該是正確的。

+0

嗯...也許不相關,因爲它似乎jQuery手機調用.button自動如果你使用數據角色=「按鈕」在你的標記(你呢?) – RwwL 2011-05-03 20:15:47

+0

是'數據角色=「按鈕」'也正常的HTML頁面(不僅移動)?哪個版本? – sumid 2012-11-08 00:37:09

+1

Sumid,不知道我理解你的問題,但是如果這有幫助:data-role =「button」是jQuery Mobile用來將元素標記爲按鈕控件(由該庫定義)自動初始化的約定。無論如何,沒有什麼能夠阻止你在「普通html頁面」上使用該數據屬性。它在整個jQuery UI庫中顯然沒有用到相同的方式。 http://jqueryui.com/button/ – RwwL 2012-12-05 14:17:35

10

未捕獲的異常:不能調用上之前 初始化按鈕 方法;試圖呼叫 方法'禁用'。

這意味着你正試圖把它未作爲一個按鈕來處理一個元素,因爲沒有.button方法被調用就可以了。因此你的問題必須是選擇器。

您正在選擇所有輸入$('input'),因此它會嘗試從按鈕小部件名稱空間中調用方法disable,不僅在按鈕上,而且還在文本輸入上。

$('button').attr("disabled", "disabled");將不適用於jQuery Mobile,因爲您修改了隱藏的按鈕,並用jQuery Mobile生成的標記替換。

必須有一個正確的選擇像禁用按鈕使用jQueryMobile的方法:

$('div#DT1S input[type=button]').button('disable'); 
+1

+1不錯的工作@naugtur,http://jsfiddle.net/ XRjh2/16 / – 2011-05-04 12:49:47

4

什麼似乎需要的是真正定義按鈕,按鈕widge噸。

我有同樣的問題(測試版1)

我在窗口準備處理程序做了

,之後它的工作,因爲它是在文檔說,也就是要做到:

$("#submitButton").button('disable'); 

我想這已經與JQM被轉換標記做的,但是,這不是真正instatiating按鈕和鏈接按鈕的真正的按鈕控件。

0

您可能正在收到該錯誤,可能是因爲該元素不在DOM內。 $(文件)。就緒();不管用。嘗試將代碼添加到pageinit事件處理程序。

這裏是一個工作示例:

<!DOCTYPE html> 
<html> 
<head> 
    <title>Button Disable</title> 
    <meta name="viewport" content="width=device-width, initial-scale=1" /> 
    <link rel="stylesheet" href="http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.css" /> 
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.6.4.min.js"></script> 
    <script type="text/javascript" src="http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.js"></script> 
</head> 
<body> 
    <div id="MyPageId" data-role="page"> 
     <div data-role="header"> 
      <h1>Button Disable</h1> 
     </div> 
     <div data-role="content"> 
      <button id="button1" type="button" onclick="javascript:alert('#button1 clicked');">Button 1</button> 
      <button id="button2" type="button" onclick="javascript:alert('#button2 clicked');">Button 2</button> 
     </div> 
     <div data-role="footer"> 
      <p>footer</p> 
     </div> 
    </div> 
    <script type="text/javascript">//<![CDATA[ 
     $('#MyPageId').bind("pageinit", function (event, data) { 
      $("#button1").button("disable"); 
     }); 
    //]]></script> 
</body> 
</html> 

希望幫助別人

2
$(document).ready(function() { 
     // Set button disabled 

     $('#save_info').button("disable"); 


     $(".name").bind("change", function (event, ui) { 

      var edit = $("#your_name").val(); 
      var edit_surname = $("#your_surname").val(); 
      console.log(edit); 

      if (edit != ''&& edit_surname!='') { 
       //name.addClass('hightlight'); 
       $('#save_info').button("enable"); 
       console.log("enable"); 

       return false; 
      } else { 

       $('#save_info').button("disable"); 

       console.log("disable"); 
      } 

     }); 


    <ul data-role="listview" data-inset="true" data-split-icon="gear" data-split-theme="d"> 
     <li> 
      <input type="text" name="your_name" id="your_name" class="name" value="" placeholder="Frist Name" /></li> 
     <li> 
      <input type="text" name="your_surname" id="your_surname" class="name" value="" placeholder="Last Name" /></li> 
     <li> 
      <button data-icon="info" href="" data-role="submit" data-inline="true" id="save_info"> 
      Save</button> 

對我來說這一個工作禁用 - 啓用

3

我的,你可能需要鍛鍊邏輯,創建了一個可以完全禁用或呈現頁面內容的只讀視圖的小部件。它禁用所有按鈕,錨點,刪除所有點擊事件等,並可以重新啓用它們。它甚至支持所有的jQuery UI小部件。我爲我在工作中編寫的應用程序創建了它。你可以自由使用它。

檢查出來在(http://www.dougestep.com/dme/jquery-disabler-widget)。

2

根據我的調查結果...

當你選擇一個元素上執行按鈕(),並嘗試在同一個不同的選擇使用按鈕()的函數/方法時發生此JavaScript錯誤元件。

例如,這裏是HTML:

<input type="submit" name="continue" id="mybuttonid" class="mybuttonclass" value="Continue" /> 

所以你執行按鈕()就可以了:

jQuery(document).ready(function() { jQuery('.mybuttonclass').button(); }); 

然後嘗試禁用它,這個時候不使用類作爲您發起它,而是使用ID,那麼你會得到錯誤,因爲這個線程的標題爲:

jQuery(document).ready(function() { jQuery('#mybuttonid').button('option', 'disabled', true); }); 

所以寧可使用cl屁股再次啓動它,這將解決問題。

0

對於禁用按鈕添加css類disabled它。寫

$("button").addClass('disabled') 
0

對於jQuery Mobile的1.4.5:

錨按鈕,CSS類是:ui-state-disabled,以及輸入按鈕,這只是夠切換disabled屬性。

function toggleDisableButtons() { 
 
    $("#link-1").toggleClass("ui-state-disabled", !$("#link-1").hasClass("ui-state-disabled")); 
 
    $("#button-1").attr("disabled") ? $("#button-1").removeAttr("disabled") : $("#button-1").attr("disabled",""); 
 
}
<!DOCTYPE html> 
 
<html> 
 
<head> 
 
    <meta charset="utf-8"> 
 
    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"> 
 
    <link rel="stylesheet" href="https://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.css"> 
 
    <script src="https://code.jquery.com/jquery-1.11.2.min.js"></script> 
 
    <script src="https://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.js"></script> 
 
</head> 
 
<body> 
 
<div data-role="page" id="page-1"> 
 
    <div role="main" class="ui-content"> 
 
    <button class="ui-btn" onclick="toggleDisableButtons();">Toggle disabled</button> 
 
    <a id="link-1" href="#" class="ui-btn ui-state-disabled">Anchor</a> 
 
    <button id="button-1" disabled="">Button</button> 
 
    
 
    </div> 
 
</div> 
 
</body> 
 
</html>

順便說一句,對於輸入按鈕,還有一個替代的方法:

啓用:

$(".class").prop("disabled", false).removeClass("ui-state-disabled"); 

禁用:

$(".class").prop("disabled", true).addClass("ui-state-disabled");