javascript - 如何在每次执行另一个函数之前检查一个函数是否已被调用

标签 javascript

我有一个 HTML 元素的 onMouseDownEssence() 和 onMouseUpEssence() 函数,如何在调用 onMouseUpEssence() 之前检查是否每次都调用 onMouseDownEssence() 以确保获得正确的鼠标按下位置?

这是 mousedown 函数:

var mouseDownIndex = -1;

function onMouseDownEssence(downIndex, e, className) {

    dragTarget = e.target;
    holdStarter = new Date().valueOf();

    mouseDownIndex = downIndex;
}

这是 mouseup 函数:

function onMouseUpEssence(upIndex, e, className) {

    var el = e.target;
    var holdActive = (new Date().valueOf() - holdStarter) > holdDelay;

    if (holdActive) {
        var thisUpTargetIndex = el.getAttribute("name");

        if (lastUpTargetIndex != null && thisUpTargetIndex != lastUpTargetIndex) {
            // console.log("double drag done");
            el.removeAttribute(dbl);
            lastUpTargetIndex = null;

            var selectedText = clickDragAutoExpand(mouseDownIndex, upIndex,
                    className);

        } else {
            // console.log("drag done");
            var selectedText = clickDragAutoExpand(mouseDownIndex, upIndex,
                    className);
        }

        holdActive = false;
    } else if (el.getAttribute(dbl) == null) {
        el.setAttribute(dbl, 1);
        setTimeout(
                function() {
                    if (el.getAttribute(dbl) == 1 && !dragTarget) {
                        if (e.button === 0) {
                            // console.log("single clicked ");
                            el.removeAttribute(dbl);

                            var selectedText = clickAutoExpand(upIndex,
                                    className);

                        }
                    } else {
                        if (el.getAttribute(dbl) != null)
                            lastUpTargetIndex = el.getAttribute("name");
                    }
                }, dblDelay);
    } else {
        // console.log("double clicked");
        el.removeAttribute(dbl);

        var selectedText = clickAutoExpand(upIndex, className);
    }

    dragTarget = null;

}

最佳答案

我的方法是跟踪是否调用了mouseDownEssence()。如果没有,请在继续操作之前调用它。这种方法的工作原理如下。对于异步函数,它的工作方式有所不同,但 mouseDownEssence() 似乎是一个同步函数。

let isMouseDownEssenceCalled = false;

function mouseDownEssence() {
  isMouseDownEssenceCalled = true;

  ...
}

function mouseUpEssence() {
  if (!isMouseDownEssenceCalled) {
    mouseDownEssence()
  }

  ...

  isMouseDownEssenceCalled = false;
}

关于javascript - 如何在每次执行另一个函数之前检查一个函数是否已被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52818455/

相关文章:

javascript - 有什么方法可以检查函数是否被执行? javascript

javascript - 通过更改事件添加/减去框的选项

javascript - 何时以及为何使用 JS null 合并运算符

javascript - javascript 是否可以从另一个类而不是现有对象继承属性?

javascript - 使用 jquery load() 加载内容后从页面获取所有链接;

javascript - javascript textarea POST换行MySQL

javascript - 如何计算Google Earth Engine中分类图像(Landsat)中每个类别的像素总和?

javascript - 在 Python 中转义 JavaScript 字符串

javascript - 如何从闭包内部返回一个值到外部作用域?

javascript - 按键事件在第一次触发事件时不记录输入值