時々私はボタンとしてスタイル付けされたアンカーを使いますそして時々私はただボタンを使います。私は特定のclicky-thingsを無効にしたいので。
これどうやってするの?
disabled
はブラウザによって処理されるボタンプロパティなので、ボタンを無効にするのは簡単です。
<input type="submit" class="btn" value="My Input Submit" disabled/>
<input type="button" class="btn" value="My Input Button" disabled/>
<button class="btn" disabled>My Button</button>
カスタムjQuery関数でこれらを無効にするには、単に fn.extend()
を使用します。
// Disable function
jQuery.fn.extend({
disable: function(state) {
return this.each(function() {
this.disabled = state;
});
}
});
// Disabled with:
$('input[type="submit"], input[type="button"], button').disable(true);
// Enabled with:
$('input[type="submit"], input[type="button"], button').disable(false);
それ以外の場合は、jQueryの prop()
メソッドを使用します。
$('button').prop('disabled', true);
$('button').prop('disabled', false);
disabled
がアンカータグの 有効なプロパティ ではないことは注目に値します。このため、Bootstrapは.btn
要素に次のスタイルを使用します。
.btn.disabled, .btn[disabled] {
cursor: default;
background-image: none;
opacity: 0.65;
filter: alpha(opacity=65);
-webkit-box-shadow: none;
-moz-box-shadow: none;
box-shadow: none;
color: #333;
background-color: #E6E6E6;
}
[disabled]
クラスが.disabled
クラスと同様にターゲットにされていることに注意してください。 .disabled
クラスは、アンカータグを無効にするために必要なものです。
<a href="http://example.com" class="btn">My Link</a>
もちろん、クリックしてもリンクが機能しなくなるわけではありません。上記のリンクは http://example.com にアクセスします。これを防ぐために、 event.preventDefault()
を呼び出すdisabled
クラスを使用して、アンカータグをターゲットとする簡単なjQueryコードを追加できます。
$('body').on('click', 'a.disabled', function(event) {
event.preventDefault();
});
toggleClass()
を使用してdisabled
クラスを切り替えることができます。
jQuery.fn.extend({
disable: function(state) {
return this.each(function() {
var $this = $(this);
$this.toggleClass('disabled', state);
});
}
});
// Disabled with:
$('a').disable(true);
// Enabled with:
$('a').disable(false);
次に、上で作成した前の無効化関数を拡張して、 is()
を使用して無効化しようとしている要素のタイプを確認できます。このようにして、input
またはbutton
要素でない場合はtoggleClass()
を、そうでない場合はdisabled
プロパティを切り替えます。
// Extended disable function
jQuery.fn.extend({
disable: function(state) {
return this.each(function() {
var $this = $(this);
if($this.is('input, button, textarea, select'))
this.disabled = state;
else
$this.toggleClass('disabled', state);
});
}
});
// Disabled on all:
$('input, button, a').disable(true);
// Enabled on all:
$('input, button, a').disable(false);
さらに注意すべきは、上記の関数はすべての入力タイプに対しても機能するということです。
もっと簡単で簡単な方法は考えられません。 ;-)
アンカータグを使用する(リンク):
<a href="#delete-modal" class="btn btn-danger" id="delete">Delete</a>
アンカータグを有効にするには
$('#delete').removeClass('disabled');
$('#delete').attr("data-toggle", "modal");
アンカータグを無効にするには
$('#delete').addClass('disabled');
$('#delete').removeAttr('data-toggle');
テキストフィールドと送信ボタンがあるとします。
<input type="text" id="text-field" />
<input type="submit" class="btn" value="Submit"/>
ボタンを無効にするには、例えばボタンを送信するには、 disabled attributeを次のように追加するだけです。
$('input[type="submit"]').attr('disabled','disabled');
上記の行を実行した後、送信ボタンのHTMLタグは次のようになります。
<input type="submit" class="btn" value="Submit" disabled/>
'disabled'属性に が追加されています。
テキストフィールドにテキストがある場合など、ボタンを有効にします。ボタンを有効にするには、 disable 属性を削除する必要があります。
if ($('#text-field').val() != '') {
$('input[type="submit"]').removeAttr('disabled');
}
これで上記のコードは 'disabled'属性を削除します。
私はパーティーに遅れていることを知っていますが、特に2つの質問に答えるために:
"次のように特定のclick-thingsを無効にするだけです。
これはどのくらい難しいですか? "
クリックをやめます
1. <button>
や<input type="button">
のようなボタンには、属性disabled
を追加します。
<button type="submit" disabled>Register</button>
<input type="button" value="Register" disabled>
2.リンク、任意のリンク...、実際には任意のHTML要素に対して、CSS3 pointer eventsを使用できます。
.selector { pointer-events:none; }
ポインタイベントに対するブラウザのサポートは、今日の最先端技術(5/12/14)によって素晴らしいものになりました。しかし、通常IEレルムでレガシブラウザをサポートする必要があるため、IE10以下ではポインタイベントをサポートしないでください: http://caniuse.com/pointer-events 。そのため、ここで他の人が言及しているJavaScriptソリューションの1つを使用することは、レガシーブラウザを使用する方法かもしれません。
ポインタイベントに関する詳細情報:
彼らは無効に見える
明らかにこれはCSSの答えなので、
1. <button>
や<input type="button">
のようなボタンには[attribute]
セレクターを使います。
button[disabled] { ... }
input[type=button][disabled] { ... }
-
これは私がここで述べたものを使った基本的なデモです:http://jsfiddle.net/bXm5B/4/
お役に立てれば。
私のようにボタンを無効にしたいだけの場合は、この長いスレッドに隠されている単純な答えをお見逃しなく。
$("#button").prop('disabled', true);
BootstrapのJSボタンを使っていて 'loading'状態を使っていると変な問題があることに注意してください。なぜこれが起こるのか私にはわかりませんが、ここでそれを修正する方法があります。
ボタンがあり、それをロード状態に設定したとします。
var myButton = $('#myBootstrapButton');
myButton.button('loading');
今、あなたはそれを読み込み中の状態から取り除きたいが、それを無効にしたい(例えば、ボタンが保存ボタンだった、読み込み中の状態は進行中の検証を示し、検証は失敗した)これは妥当なBootstrap JSのように見えます。
myButton.button('reset').prop('disabled', true); // DOES NOT WORK
残念ながら、それはボタンをリセットしますが、無効にはしません。どうやら、button()
は何らかの遅延タスクを実行します。だからあなたもあなたの無効化を延期する必要があります:
myButton.button('reset');
setTimeout(function() { myButton.prop('disabled', true); }, 0);
少し面倒ですが、私がよく使っているパターンです。
@James Donnellyは、jQueryを新しい機能で拡張することに依存する包括的な回答を提供しました。それは素晴らしいアイディアだから、必要な方法でうまくいくように彼のコードを修正するつもりだ。
jQueryの拡張
$.fn.disable=-> setState $(@), true
$.fn.enable =-> setState $(@), false
$.fn.isDisabled =-> $(@).hasClass 'disabled'
setState=($el, state) ->
$el.each ->
$(@).prop('disabled', state) if $(@).is 'button, input'
if state then $(@).addClass('disabled') else $(@).removeClass('disabled')
$('body').on('click', 'a.disabled', -> false)
使用方法
$('.btn-stateful').disable()
$('#my-anchor').enable()
コードは単一の要素または要素のリストを処理します。
ボタンと入力はdisabled
プロパティをサポートし、true
に設定されている場合、それらは無効に見え(ブートストラップのおかげで)クリックされても起動しません。
アンカーはdisabledプロパティをサポートしていませんので、代わりに.disabled
クラスを無効にして(再度ブートストラップのおかげで)見せるようにし、デフォルトのclickイベントをフックしてfalseを返すことでクリックを防ぎます(preventDefault
は不要) ここに )。
注 :アンカーを再度有効にするときに、このイベントをフック解除する必要はありません。 .disabled
クラスを削除するだけでうまくいきます。
もちろん、カスタムのクリックハンドラをリンクに添付している場合、これは役に立ちません。ブートストラップとjQueryを使用するときに非常に一般的なことです。そのため、これに対処するために、次のようにisDisabled()
拡張子を使用して.disabled
クラスをテストします。
$('#my-anchor').click ->
return false if $(@).isDisabled()
# do something useful
私はそれが物事を少し簡素化するのに役立つことを願っています。
全員からの素晴らしい答えと貢献! select要素を無効にすることを含めるために、この関数を少し拡張する必要がありました。
jQuery.fn.extend({
disable: function (state) {
return this.each(function () {
var $this = jQuery(this);
if ($this.is('input, button'))
this.disabled = state;
else if ($this.is('select') && state)
$this.attr('disabled', 'disabled');
else if ($this.is('select') && !state)
$this.removeAttr('disabled');
else
$this.toggleClass('disabled', state);
});
}});
私のために働いているようです。皆さんありがとう!
そのような振る舞いのために私はいつもjQueryUI button
ウィジェットを使います、私はそれをリンクとボタンのために使います。
HTML内にタグを定義します。
<button id="sampleButton">Sample Button</button>
<a id="linkButton" href="yourHttpReferenceHere">Link Button</a>
JQueryを使ってボタンを初期化します。
$("#sampleButton").button();
$("#linkButton").button();
それらを無効/有効にするにはbutton
ウィジェットメソッドを使用します。
$("#sampleButton").button("enable"); //enable the button
$("#linkButton").button("disable"); //disable the button
ボタンとカーソルの振る舞いには注意が必要ですが、無効にしたときにボタンスタイルをより深くして変更する必要がある場合は、ページのCSSスタイルファイル内の次のCSSクラスを上書きします。
.ui-state-disabled,
.ui-widget-content .ui-state-disabled,
.ui-widget-header .ui-state-disabled {
background-color:aqua;
color:black;
}
ただし、覚えておいてください。これらのCSSクラス(変更された場合)は他のウィジェットのスタイルも変更します。
以下は私にとって非常にうまくいっています。
$("#button").attr('disabled', 'disabled');
これはどちらかといえば遅い答えですが、ブーストボタンをクリックした後無効にしてNice効果を追加する方法を探しているときにこの質問に出会いました(f.e a spinner)。私はまさにそれをする素晴らしいライブラリを見つけました:
http://msurguy.github.io/ladda-bootstrap/ /
必要なcssとjsを含め、ボタンにいくつかのプロパティを追加し、javascriptでladaを有効にするだけです。あなたのボタンは新しい生活をしています(それがどれほど美しいかを見るためにデモをチェックしてください)!
私は私の答えが遅れていることを知っています、しかしIMOこれはボタンを「有効にする」と「無効にする」ボタンを切り替える最も簡単な方法です
function toggleButtonState(button){
//If button is enabled, -> Disable
if (button.disabled === false) {
button.disabled = true;
//If button is disabled, -> Enable
} else if (button.disabled === true) {
button.disabled = false;
}
}
これは上手くいきません
$(this).attr('checked') == undefined
でコードを調整してください
if(!$(this).attr('checked') || $(this).attr('checked') == false){
現在有効になっているもののように見えるとします。
<button id="btnSave" class="btn btn-info">Save</button>
これを追加するだけです:
$("#btnSave").prop('disabled', true);
これでボタンが無効になります
<button id="btnSave" class="btn btn-primary" disabled>Save</button>
ページ上に次のようなボタンがあるとします。
<input type="submit" class="byBtn" disabled="disabled" value="Change"/>
<input type="submit" class="byBtn" disabled="disabled" value="Change"/>
<input type="submit" class="byBtn" disabled="disabled" value="Change"/>
<input type="submit" class="byBtn" disabled="disabled" value="Change"/>
<input type="submit" class="byBtn" disabled="disabled" value="Change"/>
<input type="submit"value="Enable All" onclick="change()"/>
Jsコード:
function change(){
var toenable = document.querySelectorAll(".byBtn");
for (var k in toenable){
toenable[k].removeAttribute("disabled");
}
}