暴力的な手段を使ってマウスの右ボタンを無効にすることは非人道的であるため、マウスの右ボタンを選択的に無効にすることが最善です。
コード例は次のとおりです:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.45it.com/" /> <title>脚本之家</title> <style type="text/css"> html,body{height:100%} div{ width:150px; height:50px; background:#CCC; } </style> <script type="text/javascript" src="mytest/jQuery/jquery-1.8.3.js"></script> <script type="text/javascript"> $(document).ready(function(){ function jQuery_isTagName(ev,arr){ ev=$.event.fix(ev); var target=ev.target||ev.srcElement; if(arr&&$.inArray(target.tagName.toString().toUpperCase(),arr)==-1){ return false; } return true; } $(document).bind("contextmenu",function(ev){ if(!jQuery_isTagName(ev,['INPUT','TEXTAREA'])){ ev.preventDefault(); return false; } return true; }) }) </script> </head> <body> <div id="thediv"></div> <textarea></textarea> </body> </html>
上記のコードは要件を満たしています。コードの実装プロセスを紹介します。
コードのコメント:
1.$(document).ready(function(){})、テキスト構造が完全に読み込まれたら、関数内のコードを実行します。
2.function jQuery_isTagName(ev,arr){}、この関数は、要素が右クリック メニューを使用できるリストにあるかどうかを判断できます。最初のパラメーターはイベント オブジェクトで、2 番目のパラメーターは配列です。配列要素は、右クリック メニューからタグ名を使用できます。
3.ev=$.event.fix(ev)、さまざまなブラウザでイベント オブジェクトの互換性を実現するため、fix() 関数は jquery によって内部的に使用されます。もちろん、この方法でも使用できます。
4.var target=ev.target||ev.srcElement を使用してイベント ソース オブジェクトを取得します。
5.if(arr&&$.inArray(target.tagName.toString().toUpperCase(),arr)==-1){return false;}、指定されたタグ要素が配列内にあるかどうかを判断します(指定されたタグ要素が存在しない場合)。配列タグ内の要素を指定した場合は false を返します。
6.trueを返す、trueを返す。
8.$(document).bind("contextmenu",function(ev){})、ドキュメント document の contextmenu イベント処理関数を登録します。
9.if(!jQuery_isTagName(ev,['INPUT','TEXTAREA'])){
ev.preventDefault();
false を返します;
}
指定したタグが右クリック メニューを使用できるリストにない場合は、ev.preventDefault() を使用してイベントのバブリングを防ぎます。それ以外の場合は、子要素が無効になりますが、これは重要です。右クリック メニュー、右クリックの子要素 の場合、イベントが親要素に渡されるため、右クリック メニューは引き続きポップアップ表示されます。 false を返すと、右クリック メニュー