Javascript 在mouseDown上获取类或id值
我想停止默认的右键单击菜单并创建我自己的菜单,但在鼠标按下之前,我需要获取类和id数据,所以在我检查是否右键单击后,打开包含该类名或id的特定数据的菜单 现在的问题是,我得到的唯一id和类值是未定义的,即使我同时有className和id HTML:Javascript 在mouseDown上获取类或id值,javascript,jquery,Javascript,Jquery,我想停止默认的右键单击菜单并创建我自己的菜单,但在鼠标按下之前,我需要获取类和id数据,所以在我检查是否右键单击后,打开包含该类名或id的特定数据的菜单 现在的问题是,我得到的唯一id和类值是未定义的,即使我同时有className和id HTML: 编辑:$('body')到$(document),但我也有同样的问题,但是当我试图通过单击document来获取一些数据时,我确实得到了我单击的元素,我需要用右键单击来检查它。我想你可以将$('body')。mousedown替换为: $('.yo
编辑:$('body')到$(document),但我也有同样的问题,但是当我试图通过单击document来获取一些数据时,我确实得到了我单击的元素,我需要用右键单击来检查它。我想你可以将$('body')。mousedown替换为:
$('.youClassName').on('contextmenu', function(e)
{
var id = $(this).attr('id');
className = $(this).attr('class');
//your actions
});
问题是,
$(this)
正在返回body标记,因为您将单击处理程序附加到了body标记。您可以使用e.target
访问实际单击的内容。请参阅新代码段
$('body')。上下文菜单(函数(e){
var id=$(e.target).attr('id');
var clas=$(e.target).attr('class');
日志(“id:+id+”/class:+clas);
如果(id==“”&clas==“”){
日志(“id:+id+”/class:+clas);
}否则{
如果(clas==“someClassName”){
$(文档).mousemove(函数(事件){
var xPos=event.pageX;
var yPos=event.pageY;
log('xPos:'+xPos+'px;/yPos:'+yPos+'px;');
});
}
}
返回false;
});代码>
一些文字
某些数据发生这种情况的原因是因为您正在处理正文
事件。在处理程序中,此
将引用正文
。而body
可能没有id
或class
。您需要处理特定的元素事件。例如:
$('.someClassName').on('contextmenu', function(e)
{
var id = $(this).attr('id');
var clas = $(this).attr('class');
console.log("id: "+id+" / class: "+clas);
//etc
});
听起来您可能不明白函数中的是什么。对于事件处理程序,this
(以及jQuery的$(this)
)引用处理程序所附加的元素。如果是$(document).on('mousedown',…)
,函数中的$(this)
将引用整个文档。幸运的是,您传入的函数有一个对所选元素的引用;目标
香草JS
jQuery
target
变量是在文档中鼠标移动的元素。从那里,您可以获得目标元素的属性。注意,目标将是一个DOM节点,您需要将其包装在$()
中,使其成为一个jQuery对象
香草JS
jQuery
我还将classes
变量设置为列表,而不是字符串。可能不希望假定元素总是有一个类。var id=$(this.attr('id')代码>这里指的是正文。当我用文档替换时,我有同样的问题,我忘记了指令e.preventDefault();为了防止浏览器上下文菜单,但这不是我需要的,我需要用右键单击任意位置,然后检查我是否单击了具有特定id或类的某个元素。如果我的答案是这样的,请检查代码段。即使我添加了文档,也会遇到同样的问题。我需要点击整个页面,并用click()检查我点击的位置;但我需要右键点击查看是的,这是我需要的。谢谢太好了,很高兴我能够帮助编辑,即使我用文档替换正文,我也会遇到同样的问题,当我尝试用click()做同样的事情时也是如此;它的工作,但我需要它的右键点击。。。
$('.youClassName').on('contextmenu', function(e)
{
var id = $(this).attr('id');
className = $(this).attr('class');
//your actions
});
$('.someClassName').on('contextmenu', function(e)
{
var id = $(this).attr('id');
var clas = $(this).attr('class');
console.log("id: "+id+" / class: "+clas);
//etc
});
document.onmousedown = function(ev){
var document = this;
var target = ev.target;
}
$(document).on('mousedown', function(ev){
var document = $(this);
var target = ev.target;
})
document.onmousedown = function(ev){
var document = this;
var target = ev.target;
var id = target.id;
var classes = target.className.split(' ');
}
$(document).on('mousedown', function(ev){
var document = $(this);
var target = $(ev.target); // jQuery wrapped target
var id = target.attr('id');
var classes = target.attr('class').split(' ');
})