首先,我不寻求jQuery解决方案,只需要一个简单的纯JavaScript代码,放在元素内部。
假设我们有以下HTML代码:
<select onmousedown=" ??? ">...</select>
我希望在元素内部添加一个简单的脚本来显示弹出消息alert()
,并提供有关哪个按钮被按下以及元素相对于文档<body>
的位置的信息 - 类似于jQuery中的offset()
。
首先,我不寻求jQuery解决方案,只需要一个简单的纯JavaScript代码,放在元素内部。
假设我们有以下HTML代码:
<select onmousedown=" ??? ">...</select>
我希望在元素内部添加一个简单的脚本来显示弹出消息alert()
,并提供有关哪个按钮被按下以及元素相对于文档<body>
的位置的信息 - 类似于jQuery中的offset()
。
创建一个JavaScript函数并在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);
}
$('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>
e || window.event
,因为你正在从监听器传递 event
。 - RobG<select onmousedown="???">...</select>
代码中的???
。 - Ωmega< ... onclick="fn(event)">
时,在IE中,标识符event
解析为window.event
,并传递给fn()
。在Mozilla和其他浏览器中,它解析为处理程序的事件对象,因此它们也会传递相关事件的引用。 - RobGarguments[0]
代替event
作为参数:<select onmousedown="return onMouseDown.call(this, arguments[0]);">...</select>。这样,onMouseDown
函数的this
参数将被设置为当前<select>
的DOM,并且onMouseDown
函数可以返回false
以停止默认处理。只需将onMouseDown
函数定义为var onMouseDown = function (e) {};
,因为在JavaScript的strict
模式下,function
不支持this
。 - Oleg在不同的浏览器中,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>
<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>
<select onmousedown=" ??? ">...</select>
代码中替换掉???
的内容。 - Ωmega在继续之前,您可能想阅读这篇文章:Javascript疯狂:鼠标事件。
文档上的点击会触发一个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);">
:P
- Šime Vidas