0

特定のdivの選択できないダブルクリックなどをブロックしたいのですが。

これが私が試したことです:

<div id="test" class="unselectable">asd</div>

$(document).ready(function() {
    $.ctrl = function(key, callback, args) {
        var isCtrl = false;
        $(document).keydown(function(e) {
            if (!args) args = []; // IE barks when args is null
            if (e.ctrlKey) isCtrl = true;
            if (e.keyCode == key.charCodeAt(65) && isCtrl) {
                callback.apply(this, args);
                return false;
            }
        }).keyup(function(e) {
            if (e.ctrlKey) isCtrl = false;
        });
    };

    //Other Method
    $(function() {
        $(document).keydown(function(objEvent) {
            if (objEvent.ctrlKey) {
                if (objEvent.keyCode == 65) {
                    objEvent.disableTextSelect();
                    return false;
                }
            }
        });
    });  
});​

しかし、残念ながら、これはうまくいきません。目的を達成するためにコードを変更するにはどうすればよいですか?

4

3 に答える 3

7

これにはJavascriptは必要ありません(回答を参照)。これを行う:

div {
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}
于 2012-04-22T22:56:40.357 に答える
2

私の知る限り、ユーザーがdivのテキストを選択するのを止める方法はありません。これはブラウザであり、オペレーティングシステムに関連する可能性のある機能であるため、Javascriptで通常操作できる範囲を超えています。

ユーザーに非常に迷惑をかけたい場合は、ドキュメント全体にイベントハンドラーを作成して、ユーザーがcontrol-Aを同時に押したかどうかを確認します。そうであれば、デフォルトを防ぐことでdivが選択されないようにします。アクションまたはページの他の部分に焦点を当てます。しかし、これは、あなたが彼らが彼らのコンピュータを彼らが望むように使用することを妨げようとしていること、そしておそらく彼らをあなたのウェブサイトからハイテールにすることを彼らに怒らせるだけです。

ユーザーに何かを選択させたくない理由について、もう少し背景を教えてください。javascript / CSSを無効にしてページをリロードするだけでよいことを考えると、何をするにしても常に回避策があります。テキストのコピーと貼り付けをもう少し難しくしたい場合は、目的のテキストを含む画像を作成して、代わりにdivに配置できますが、それでも、ユーザーをWebサイト煩わせるためだけに時間を費やしています。 。


私はあなたのプロジェクト全体をよく知っているので、あなたが何をすべきかを正確に伝えることができると少しも主張するつもりはありませんが、あなたが取り組んでいる目標を達成するためのより良い方法があると思います。もう少し詳細を投稿していただければ、おそらくそれを見つけるお手伝いをいたします。:D

于 2012-04-22T22:55:05.180 に答える
1

私はSOに関する少なくとも3つの同様の質問に、かなり明確な答えで答えました。これが最も人気のあるです。

また、IEで機能するようにその回答からの情報でjsFiddleを更新しました:http://jsfiddle.net/VYKfL/3/

于 2012-04-22T23:15:26.410 に答える