我想用检测 Ctrl -click替换检测双击,但我不知道该怎么做。
$(document).ready(function () {
$(document).dblclick(function (e) {
var target = (e && e.target) || (event && event.srcElement);
var tag = target.tagName.toLowerCase();
if (!(tag == 'input' || tag == 'textarea' || tag == 'img')) {
openIfSelected("dblclick");
}
});
});
答案 0 :(得分:1)
您正在寻找jQuery .click()
方法和MouseEvent.ctrlKey
属性。
您可以执行以下操作:
$(document).ready(function () {
$(document).click(function (e) {
if(e.ctrlKey){
var tag = e.target.tagName.toLowerCase();
if (!(tag == 'input' || tag == 'textarea' || tag == 'img')) {
openIfSelected("dblclick"); //Still pass "dblclick", but upon Ctrl-click
}
}
});
});
function openIfSelected(reason){
//This is now only called upon Ctrl-click, but the "reason" remains "dblclick".
console.log('Called "openIfSelected" with reason: ' + reason);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div><kbd>Ctrl</kbd>-Click me</div>
注意:强>
您使用了代码:
var target = (e && e.target) || (event && event.srcElement);
这写得很奇怪。您可能正在尝试使用window.event
。但是,这不是必需的,因为您正在使用jQuery, which normalizes the event object that is passed to event handlers,因此您不必执行此类操作。此外,您使用的代码会将此问题声明为Google Chrome扩展程序问题。如果是这种情况,并且您没有使用jQuery,那么您仍然不需要这样做,因为您不需要考虑在旧浏览器(例如IE)中使用代码。
答案 1 :(得分:0)
我这样修好了。非常感谢Makyen。
$(document).ready(function () {
$(document).click(function (e) {
if(event.ctrlKey){
var target = event.srcElement;
var tag = target.tagName.toLowerCase();
if (!(tag == 'input' || tag == 'textarea' || tag == 'img')) {
openIfSelected("dblclick");
}
}
});
});