Javascript 左下还是右下?

Javascript 左下还是右下?,javascript,html,jquery,dom-events,onmousedown,Javascript,Html,Jquery,Dom Events,Onmousedown,首先,我不是在寻找jQuery解决方案,只是在元素内部寻找简单的纯Javascript代码 假设我们有以下html代码: <select onmousedown=" ??? ">...</select> 。。。 我希望元素内部有一个简单的脚本来显示弹出消息alert(),其中包含按下哪个按钮的信息,以及元素与文档的相对位置是什么-类似于jQuery中的offset()。.. 编辑 ..创建一个具有某个名称的JavaScript函数,然后在传递事件的

首先,我不是在寻找jQuery解决方案,只是在元素内部寻找简单的纯Javascript代码

假设我们有以下html代码:

<select onmousedown=" ??? ">...</select>
。。。
我希望元素内部有一个简单的脚本来显示弹出消息
alert()
,其中包含按下哪个按钮的信息,以及元素与文档的相对位置是什么
-类似于jQuery中的
offset()

..

编辑


..

创建一个具有某个名称的JavaScript函数,然后在传递
事件的
onmousedown
事件上调用它,该
对象可在函数内部使用

HTML

如果您计划使用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>
。。。
编辑 在继续之前,您可能希望阅读本文:

单击具有许多属性的文档分派,例如,告诉您按下了哪个鼠标按钮,告诉您单击时是否按下了控制键

请注意,按钮并不是真正的“左”和“右”,因为它们可以根据用户偏好进行更改,您想知道的是,它是主按钮(通常是左按钮,但可能是右按钮,或者可能是与其他指向设备完全不同的按钮)还是次按钮(通常是右按钮,但也可能是任何按钮)

一些播放代码:

<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>

功能点击详情(e){
e=e | | window.event;
var msg=[];
对于(e中的风险值p){
msg.push(p+':'+e[p]);
}
document.getElementById('msg').innerHTML=msg.join('
'); } window.onload=函数(){ document.getElementById('sp0')。onmousedown=单击详细信息; } 点击我
编辑 啊,见鬼:

<select onmousedown="alert('Button: ' + event.button
                         + '\nPosition: ' + this.offsetLeft 
                         + ',' + this.offsetTop);">

MouseEvent.button在不同浏览器中具有不同的值

MouseEvent.button == 1// means left key in ie6~ie8
MouseEvent.button == 0// means left key in ie9&others

“我不是在寻找jQuery解决方案”*放置jquery标记*
:P
@Šime Vidas::这意味着我正在寻找jquery替代代码:D::我的意思是在元素内部的脚本,所以会有什么东西取代???在
代码中。只需将脚本移动到onmousedown属性中即可::我无法为函数分配任何新名称,也无法创建新的全局变量。您的代码也不检查开关按钮是否按下,如果主(左)或其他…再次,只要将脚本移动到onmousedown属性中,在这种情况下就不需要使用
e | | window.event
,因为您正在从侦听器传递
event
。在IE中,它不起作用,所以我们必须使用window.event来访问它。@ShankarSangoli::我需要不使用任何新函数名称的解决方案,由于其他合作伙伴需要将此代码添加到其现有页面中,因此为了消除函数名和/或变量冲突的风险,我需要解决方案,而无需为函数和/或全局变量指定某些名称。我的意思是在元素内部编写脚本,这样就可以替换
中的
代码。@ShankarSangoli你错了。当你写
<。。。onclick=“fn(event)”>
然后在IE中,标识符
event
解析为
窗口。event
就是传递给
fn()
。在Mozilla和其他浏览器中,它解析为处理程序的事件对象,因此它们也会传递对相关事件的引用。@RobG-我说的是IE7及以下版本。可能它在IE8+中工作只是为了让你有一天,在IE中“左”键是1表示mousedown和mouseup,但是0表示click、dblclick和contextmenu事件。元素没有可用的id,代码需要在元素内部,没有新的全局变量,没有新函数的名称。然后将代码放入处理程序中,以上只是为了帮助你。我不会为你写代码的。
<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);">
MouseEvent.button == 1// means left key in ie6~ie8
MouseEvent.button == 0// means left key in ie9&others