我正在使用大约10年前写的遗留HTML页面。话虽这么说,但应该明确地知道,重构旧代码不仅不是时间有效,而且是一种冒险的尝试。
旧版网页有许多按钮,可使用onClick =“myFunction()”标记激活JavaScript事件。我的任务是将JavaScript文件(使用jQuery)连接到这些传统网页中。我已经添加了有问题的JavaScript文件和jQuery 1.9.1源代码,并将它们附加到关闭正文标记之前的旧HTML页面中,例如:
<script src="jquery-1.9.1.min.js"></script>
此JavaScript源文件(使用jQuery)使用附加的类“getStats”激活按钮上的mousedown事件,例如:
$(document).on('mousedown', '.getStats', function (event) {
//Stuff
});
然而,当jQuery激活时,它不会通过HTML onClick事件执行按钮应该执行的重定向。
我无法在网上找到有关HTML onClick和jQuery mousedown事件时序如何发生以了解我是否遇到竞争条件的任何信息。 HTML onClick重定向和jQuery mousedown事件都需要发生,我不能简单地返回并编辑所有遗留的HTML onClick事件,这要在jQuery中完成,因为这需要数月的工作。
示例jsFiddle: https://jsfiddle.net/koa2hsbp/
jQuery可以立即使用。如果你注释掉jQuery mousedown函数,那么HTML onClick就可以了。但我必须在两个部分激活的地方(最好是在HTML onClick之前的jQuery mousedown),而不改变HTML的功能。 (同样,改变遗留代码本身就是一项代价高昂的努力。)
答案 0 :(得分:0)
关于事件的一些解释:
mousedown - 在聚焦元素时按下鼠标按钮后立即触发
mouseup - 鼠标按钮上升后立即触发,同时聚焦元素
点击 - 当您在同一元素上连续mousedown +鼠标时触发。
所以在你的例子中 - 你按下鼠标,这会立即触发产生警报的代码。然后你释放鼠标按钮,但是web paged专注于警报,而不是我们的元素,因为警报窗口本质上会阻止其他所有内容并中断javascript。由于没有mouseup事件 - 也没有click事件,因此不会调用遗留代码。
尝试以下来证明我是对的 - 按住鼠标并按住它。然后单击“输入”按钮 - 这将删除警报。然后在元素顶部释放鼠标按钮。这将触发点击。
不幸的是,在同一个示例中很难混合mousedown click和alert。如果需要警报,请考虑将jQuery处理程序移动到单击。原因将在遗留处理程序之后调用jQuery。