まず第一に、私は jQuery ソリューションを探しているのではなく、単純な純粋な Javascript コードを要素内に探しています。
次の html コードがあるとします。
<select onmousedown=" ??? ">...</select>
要素内の単純なスクリプトで、alert()
どのボタンが押されたか、ドキュメントに対する要素の相対的な位置を示すポップアップ メッセージを表示するようにします (jQueryの<body>
ようなもの)。offset()
まず第一に、私は jQuery ソリューションを探しているのではなく、単純な純粋な Javascript コードを要素内に探しています。
次の html コードがあるとします。
<select onmousedown=" ??? ">...</select>
要素内の単純なスクリプトで、alert()
どのボタンが押されたか、ドキュメントに対する要素の相対的な位置を示すポップアップ メッセージを表示するようにします (jQueryの<body>
ようなもの)。offset()
何らかの名前で JavaScript 関数を作成し、関数内で使用できるandオブジェクトをonmousedown
渡すイベントで呼び出します。event
this
HTML
<select onmousedown="onMouseDown(event, this)">...</select>
JS
function onMouseDown(e, obj){
e = e || window.event; //window.event for IE
alert("Keycode of key pressed: " + (e.keyCode || e.which));
alert("Offset-X = " + obj.offsetLeft);
alert("Offset-Y = " + obj.offsetTop);
}
jQueryを使用する予定がある場合は、このスクリプトを使用できます
$('select').mousedown(function(e){
alert("Keycode of key pressed: " + e.which);
//Inside the handler this points to the select DOM element
alert("Offset-X = " + $(this).offset().left);
alert("Offset-Y = " + $(this).offset().top);
});
アップデート:
インラインスクリプトが必要な場合は、これを試してください。
<select onmousedown="function(e, obj){ e = e || window.event;alert('Keycode of key pressed: ' + (e.keyCode || e.which));alert('Offset-X = ' + obj.offsetLeft);alert('Offset-Y = ' + obj.offsetTop);}(event, this);">...</select>
MouseEvent.button は、ブラウザーごとに異なる値を持ちます
MouseEvent.button == 1// means left key in ie6~ie8
MouseEvent.button == 0// means left key in ie9&others
<select id="foo" onmousedown="mouseDown()">...</select>
window.captureEvents(Event.MOUSEDOWN)
window.onmousedown = mouseDown
function mouseDown(e)
{
xPos = e.screenX;
yPos = e.screenY;
alert('onmousedown foo ' + ' x:' + xPos + ' y:'+ yPos);
}
編集
<select id="foo" onmousedown="function mouseDown(e){alert(MouseEvent.button + ' x:' + e.screenX + ' y:'+ e.screenY);}">...</select>
先に進む前に、次の記事をお読みください: Javascript Madness: Mouse Events
ドキュメントをクリックすると、多数のプロパティを持つMouseEvent オブジェクトがディスパッチされます。たとえば、 MouseEvent.buttonはどのマウス ボタンが押されたかを示し、MouseEvent.ctrlKeyはクリック時にコントロール キーが押されたかどうかを示します。
ボタンは実際には「左」と「右」ではないことに注意してください。ユーザー設定によって変更できるため、知りたいのは、それがプライマリ ボタンであったかどうかです (通常は左ですが、右である場合もあれば、まったく異なるものである場合もあります)。他のポインティングデバイスから)またはセカンダリボタン(通常は右ですが、何でもかまいません)。
いくつかのプレイ コード:
<script>
function clickDetails(e) {
e = e || window.event;
var msg = [];
for (var p in e) {
msg.push(p + ': ' + e[p]);
}
document.getElementById('msg').innerHTML = msg.join('<br>');
}
window.onload = function() {
document.getElementById('sp0').onmousedown = clickDetails;
}
</script>
<div>
<span id="sp0">click me</span>
<br>
<span id="msg"></span>
</div>
ああ、なんてこった:
<select onmousedown="alert('Button: ' + event.button
+ '\nPosition: ' + this.offsetLeft
+ ',' + this.offsetTop);">