4

チェックボックスを右クリックしたときにチェックボックスを無効/有効にできるコードをいくつか書きました。IE では動作しますが、Chrome や Firefox では動作しません。

rightClickFunc: function (e) 
{
    var obj;
    if ($.browser.msie) obj = event.srcElement;
    else obj = e.target;
    stuff.disableEnableObject(obj);
    return false;
},

disableEnableObject: function (o)
{
    if (o.getAttribute("disabled") == null)                
          $('#'+o.id).attr("disabled", "disabled");
    else  $('#'+o.id).removeAttr("disabled");
}

Chrome で IE と同じ機能を利用するにはどうすればよいですか? 問題は、クロムで無効になっているアイテムを右クリックすると、コンテキスト メニュー (右クリック メニュー) が開くことです。

コードのサンプルを作成しました - http://jsfiddle.net/e72M6/を参照してください。IE と chrome で実行して違いを確認してください。(IE はボックスを有効にできますが、Chrome はできません)。

IE と同じ機能を他のブラウザに持たせたい。したがって、ボックスを有効にすることができます。

4

3 に答える 3

3

大変な作業になりますが、技術的には、要素を無効にすると、透明な要素をその上に積み重ねて (ユーザーには見えないように)、同じサイズ/形状にして、そのクリック イベントをリッスンすることができます。有効になっている場合は、積み重ねられた要素を非表示にします。

ここから始めましょう: http://jsfiddle.net/8dYXd/2/

次の構造を使用します。

<span>
    <input id='a' type='checkbox' disabled="disabled" />
    <span class="disabled-detector"></span>
</span>

そしてこのCSS:

span {
    position: relative;
}

span.disabled-detector {
    position: absolute;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
    opacity: 0;
}

input+span.disabled-detector {
    display: none;
}

input[disabled]+span.disabled-detector {
    display: inline;
}

無効な要素を引き続き「クリック」できることに注目してください。

click(またはcontextmenu) イベントがinputと透過要素の両方を対象とするように更新する必要があります。技術的には、親を使用するだけで済みます。特別なクラスを指定して、そのイベントを<span>リッスンします。clickイベントはその子孫からバブルアップするので、それで問題ありません。

于 2013-04-23T16:50:27.543 に答える
2

要素を無効にすることはできますが、再度有効にすることはできません。これは、無効な要素がマウス イベントを発生させないためです。これをすべてのブラウザで動作させる方法はないと思います。

于 2013-04-23T16:30:46.637 に答える