2011-05-03 65 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");