jQueryのボタンを無効にする


359

私のページは、複数のボタンをとして作成しますid = 'rbutton_"+i+"'。以下は私のコードです:

<button type='button' id = 'rbutton_"+i+"' onclick=disable(i);>Click me</button>

JavaScriptで

function disable(i){
    $("#rbutton'+i+'").attr("disabled","disabled");
}

しかし、クリックしてもボタンが無効になるわけではありません。


6
'rbutton _ "+ i +"'は有効なIDではありません。
Diodeus-James MacFarlane 2013年

IDを指定するにはどうすればよいですか。これは、JavaScriptのforループ内で作成されています。
user2047817 2013

jsFiddleを作成して、私たちがあなたのやっていることを確認できるようにしませんか?
j08691 2013

5
あなたはおそらくしたいdisable(this)function disable(elem) { $(elem).attr("disabled","disabled") }
JJJ

2
jQueryはインデックス番号を使用して要素をアドレス指定できるため、正しく実行すれば、IDも必要ない場合があります。自己参照としてdisable(this)を渡すことができます。
Diodeus-James MacFarlane 2013年

回答:


638

.prop代わりに使用します(そしてセレクター文字列をクリーンアップします):

function disable(i){
    $("#rbutton_"+i).prop("disabled",true);
}

生成されたHTML:

<button id="rbutton_1" onclick="disable(1)">Click me</button>
<!-- wrap your onclick in quotes -->

しかし、「ベストプラクティス」のアプローチは、JavaScriptイベントバインディングを使用するthisことです。

$('.rbutton').on('click',function() {
    $(this).prop("disabled",true);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<button class="rbutton">Click me</button>

http://jsfiddle.net/mblase75/2Nfu4/


これが私が作成した小さなフィドルです。私が間違っていることをさせてください。 jsfiddle.net/2Nfu4/3
user2047817

OK。それはノーラップで機能しました-ヘッドで..しかし、なぜ私に尋ねてもいいですか?これは似たようなものかもしれませんが、実際のコードではこれをしていません!!
user2047817 2013

jsFiddleで設定されたとおりのようです。何が起こっているのかを正確に分析したい場合は、ブラウザーで「要素を検査」できます。
Blazemonger 2013

1
これはうまくいきます。ajaxを使用している場合は、成功およびエラーの場合にボタンを有効にしてください。ajax呼び出しの終わりまでではありません。それはすぐに有効になり、無効化はまったく表示されないためです。
user890332 2014

jQuery 1.10.2では、IE 11で機能しますが、Chromeバージョン39.0.2171.95 mでは機能しません。疑わしいことに、この回答に使用されているフィドルはjQuery 1.10.2を提供していません
Alex

35

このコードを試してください:
HTML

<button type='button' id = 'rbutton_'+i onclick="disable(i)">Click me</button>

関数

function disable(i){
    $("#rbutton_"+i).attr("disabled","disabled");
}

jqueryを使用したその他のソリューション

$('button').click(function(){ 
    $(this).attr("disabled","disabled");
});

デモ


純粋なJavaScriptを使用したその他のソリューション

<button type='button' id = 'rbutton_1' onclick="disable(1)">Click me</button>

<script>
function disable(i){
 document.getElementById("rbutton_"+i).setAttribute("disabled","disabled");
}
</script>

デモ2


2番目の.click()関数は、デモで完全に機能します。しかし、私は最初のソリューションで述べたように別の方法を使用する必要がありますが、それは機能しません。助けてもらえますか!
user2047817 2013

純粋なjavascript @ user2047817を使用した3番目のソリューションを追加しました
アレッサンドロミノクチェリ2013

29

ここには2つの点があり、最高投票数の回答は、OPの質問に従って技術的に正しいです。

簡単に要約すると:

$("some sort of selector").prop("disabled", true | false);

ただし、jQuery UIを使用している場合(OPはそうではなかったと思いますが、ここに到着する人もいる可能性があります)、これによりボタンのクリックイベントが無効になりますが、UIのスタイルに従ってボタンが無効に表示されません。

jQuery UIスタイルのボタンを使用している場合は、次の方法で有効/無効にする必要があります。

$("some sort of selector").button("enable" | "disable");

http://api.jqueryui.com/button/#method-disable


27

これは私の意見では最も簡単な方法です:

// All buttons where id contains 'rbutton_'
const $buttons = $("button[id*='rbutton_']");

//Selected button onclick
$buttons.click(function() {
    $(this).prop('disabled', true); //disable clicked button
});

//Enable button onclick
$('#enable').click(() =>
    $buttons.prop('disabled', false) //enable all buttons
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="rbutton_200">click</button>
<button id="rbutton_201">click</button>
<button id="rbutton_202">click</button>
<button id="rbutton_203">click</button>
<button id="rbutton_204">click</button>
<button id="rbutton_205">click</button>
<button id="enable">enable</button>


1
これは完全に機能しました。ブートストラップボタンを使用しても。
steve moretz


15

無効化ボタン:

$('#button_id').attr('disabled','disabled');

有効化ボタン:

$('#button_id').removeAttr('disabled');

13

単純に、HTMLで問題なく動作します。

<button type="button" id="btn_CommitAll"class="btn_CommitAll">save</button>

JQuery側で、この関数を無効化ボタンに配置します。

function disableButton() {
    $('.btn_CommitAll').prop("disabled", true);
}

有効化ボタンの場合:

function enableButton() {
    $('.btn_CommitAll').prop("disabled", false);
}

それで全部です。


3

これがajaxでそれを行う方法です。

$("#updatebtn").click(function () {
    $("#updatebtn").prop("disabled", true);
    urlToHandler = 'update.ashx';
            jsonData = data;
            $.ajax({
                url: urlToHandler,
                data: jsonData,
                dataType: 'json',
                type: 'POST',
                contentType: 'application/json',
                success: function (data) {
                    $("#lbl").html(data.response);
                    $("#updatebtn").prop("disabled", false);
                    //setAutocompleteData(data.response);
                },
                error: function (data, status, jqXHR) {
                    alert('There was an error.');
                    $("#updatebtn").prop("disabled", false);
                }
            }); // end $.ajax

jQueryの一部のバージョンでは、を使用する必要があります.attr('disabled', true)。どちらかはわかりませんが、使用しているバージョン(縮小していて、作業中のアプリの一部としてバンドルされています)がスローされますobject does not support prop
JoeBrockhaus 14年

2

これは私にとってはうまくいきます:

<script type="text/javascript">
function change(){
    document.getElementById("submit").disabled = false;
}
</script>

2

ある条件でボタンを無効にしたいのですが、最初の解決策を使用していますが、うまくいきません。しかし、私が2つ目を使用するとうまくいきました。以下はブラウザコンソールからの出力です。

1. $( '#psl2 .btn-continue')。prop( "disabled"、true)

<a class=​"btn btn-yellow btn-continue" href=​"#">​Next​</a>

2. $( '#psl2 .btn-continue')。attr( "disabled"、 "disabled")

<a class=​"btn btn-yellow btn-continue" href=​"#" disabled=​"disabled">​Next​</a>

0

Jquery UIボタンの場合、これは機能します。

$("#buttonId").button( "option", "disabled", true | false );
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.