無効なボタンをクリックして、ユーザーにフィードバックを提供することはできますか?
HTML:
<input type="button" value="click" disabled>
およびJavaScript:
$('input').mousedown(function(event) {
alert('CLICKED');
});
上記のコードは私には機能しません。どちらでもありません:
$('input').live('click', function () {
alert('CLICKED');
});
無効な要素のクリックをキャプチャする方法はありません。最善の策は、要素の特定のclass
に反応することです。
HTMLマークアップ:
<input type="button" class="disabled" value="click" />
JavaScriptコード:
$('input').click(function (event) {
if ($(this).hasClass('disabled')) {
alert('CLICKED, BUT DISABLED!!');
} else {
alert('Not disabled. =)');
}
});
次に、CSSスタイリングを使用して、無効な外観をシミュレートできます。
.disabled
{
background-color: #DDD;
color: #999;
}
jsFiddle は、その使用方法を示しています。
クリックイベントが発生するため、フィールドreadonly
を作成すると役立ちます。 動作の違い に注意してください。
<input type="button" value="click" readonly="readonly" />
プット
input[disabled] {pointer-events:none}
cSSで(一部のブラウザが無効な入力のクリックを完全に破棄するのを防ぎます)、親要素のクリックをキャプチャします。それは、クリックをキャプチャするために要素の上に透明なオーバーレイを置くよりもきれいな解決策です。送信され、デフォルトのブラウザ「無効」スタイルをオーバーライドする必要もあります)。
このようなボタンが複数ある場合、クリックされたボタンを区別できるように、それぞれに一意の親が必要です。pointer-events:none
では、クリックターゲットはボタン自体ではなくボタンの親であるためです。 (または、クリック座標をテストすることもできます...)。
ただし、古いブラウザをサポートする必要がある場合は、pointer-events
をサポートするブラウザを確認してください。 http://caniuse.com/#search=pointer-events
回避策なしではできません。次を参照してください: jQuery無効化された送信ボタンのクリックを検出
ブラウザは、無効な要素のイベントを無効にします。
リンクからコンテキストを追加するために編集:
質問者は、イベントが登録されない理由の説明でこのスレッドを見つけました: http://www.webdeveloper.com/forum/showthread.php?t=186057
Firefox、およびおそらく他のブラウザは、無効になっているフォームフィールドのDOMイベントを無効にします。無効化されたフォームフィールドで開始するイベントは完全にキャンセルされ、DOMツリーに伝播しません。私が間違っている場合は修正しますが、無効なボタンをクリックすると、イベントのソースは無効なボタンになり、クリックイベントは完全に消去されます。ブラウザは文字通りボタンがクリックされたことを知りませんし、クリックイベントを渡しません。 Webページのブラックホールをクリックしているようです。
回避策は、ボタンのスタイルを「見た目」に無効にすることですが、実際にはそうではありません。
disabled
要素は、ユーザーがそれらと対話することを許可しません。
そのため、いいえ、onclick
ボタンにdisabled
を配置して起動することはできません。
無効なボタンをクリックすることはできませんが、無効なリンクをクリックすることはできます
$('.btn').on('click', function(e) {
e.preventDefault();
$txt = $('div.text');
if($(this).attr('disabled')){
$txt.html('CLICKED, BUT DISABLED!!');
}else{
$txt.html('Not disabled. =)');
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="text">No action</div>
<input type="button" href="" class="btn" value="click" />
<input type="button" href="" class="btn" value="click disabled" disabled />
<a href="" class="btn">Click</a>
<a href="" class="btn" disabled>Click Disabled</a>
<input id="idButton" type="button" value="click" disabled>
$('#idButton').on('click', function() {
// The button is disabled but this will be executed.
});
上記の例は、イベントをキャプチャする必要がある無効なボタンのJQueryで機能します。
いくつかの要素でボタンをラップし、代わりにこの要素のクリックをキャッチするのはどうですか?
<span id="container">
<input type="button" value="click" disabled>
</span>
Javascript:
$("#container").click(function(){
alert("Element clicked!");
})