我想使左键行为的右键使用JS或jQuery

I want to make left click behave as right click using either JS or jQuery

本文关键字:右键 JS jQuery      更新时间:2023-09-26

我一直在尝试在用户点击左键时触发右键。

我已经尝试过trigger, triggerHandler, mousedown,但是我不能让它工作。

我能够捕获点击事件本身,但不能触发上下文菜单。

任何想法?

触发鼠标右键

function triggerRightClick(){
  var evt = new MouseEvent("mousedown", {
        view: window,
        bubbles: true,
        cancelable: true,
        clientX: 20,
        button: 2
    });
  some_div.dispatchEvent(evt);
}

触发上下文菜单

function triggerContextMenu(){
  var evt = new MouseEvent("contextmenu", {
        view: window
    });
  some_div.dispatchEvent(evt);
}

这里是bin: http://jsbin.com/rimejisaxi

更好的参考/解释:https://stackoverflow.com/a/7914742/1957036

使用以下代码反转鼠标点击。

$.extend($.ui.draggable.prototype, {
        _mouseInit: function () {
            var that = this;
            if (!this.options.mouseButton) {
                this.options.mouseButton = 1;
            }
            $.ui.mouse.prototype._mouseInit.apply(this, arguments);
            if (this.options.mouseButton === 3) {
                this.element.bind("contextmenu." + this.widgetName, function (event) {
                    if (true === $.data(event.target, that.widgetName + ".preventClickEvent")) {
                        $.removeData(event.target, that.widgetName + ".preventClickEvent");
                        event.stopImmediatePropagation();
                        return false;
                    }
                    event.preventDefault();
                    return false;
                });
            }
            this.started = false;
        },
        _mouseDown: function (event) {
            // we may have missed mouseup (out of window)
            (this._mouseStarted && this._mouseUp(event));
            this._mouseDownEvent = event;
            var that = this,
                btnIsLeft = (event.which === this.options.mouseButton),
                // event.target.nodeName works around a bug in IE 8 with
                // disabled inputs (#7620)
                elIsCancel = (typeof this.options.cancel === "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false);
            if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
                return true;
            }
            this.mouseDelayMet = !this.options.delay;
            if (!this.mouseDelayMet) {
                this._mouseDelayTimer = setTimeout(function () {
                    that.mouseDelayMet = true;
                }, this.options.delay);
            }
            if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
                this._mouseStarted = (this._mouseStart(event) !== false);
                if (!this._mouseStarted) {
                    event.preventDefault();
                    return true;
                }
            }
            // Click event may never have fired (Gecko & Opera)
            if (true === $.data(event.target, this.widgetName + ".preventClickEvent")) {
                $.removeData(event.target, this.widgetName + ".preventClickEvent");
            }
            // these delegates are required to keep context
            this._mouseMoveDelegate = function (event) {
                return that._mouseMove(event);
            };
            this._mouseUpDelegate = function (event) {
                return that._mouseUp(event);
            };
            $(document)
                .bind("mousemove." + this.widgetName, this._mouseMoveDelegate)
                .bind("mouseup." + this.widgetName, this._mouseUpDelegate);
            event.preventDefault();
            mouseHandled = true;
            return true;
        }
    });

现在在函数调用事件中使用mouseButton: 3表示右键单击,1表示左键单击