为什么检查 if preventDefault,然后 preventDefault?

Why check if preventDefault, then preventDefault?

我正在尝试使用 this website, and here's the source code. What does the following code do: line 134

中的颜色滑块
if (e.preventDefault) e.preventDefault();

我知道 preventDefault() 的作用,但为什么要检查 preventDefault() 然后 preventDefault?为什么需要 preventDefault()?

此外,之前的行检查是否:

if (target !== this)

有什么必要?

跨浏览器支持,特别是 older versions of IE。它需要在调用它之前检查该函数是否存在以防止错误。

仅用于跨浏览器支持。 IE 8 或以下不支持 preventDefault,他们使用 returnValue.

//check preventDefault function is exists in event handler 'e'
if (e.preventDefault)

    // if browser support preventDefault, call preventDefault();
    e.preventDefault();

编辑:

if (target !== this)

在这段代码中,target是被点击的对象,可以指向div#slidersdiv#silders的子元素(R,G,B,H,S,L slider)。 this 指向 div#sliders.

因此该代码意味着 "if clicked object is not div#sliders" 用于 RGB,HSL 滑块正常工作

编辑 2:

e.preventDefault() 滑块移动(拖动)完美存在。

例如,如果拖动时光标滑出,没有e.preventDefault(),则此功能将无法正常使用。

if 子句中没有括号。因此,这不是函数调用,而只是检查是否存在这样的方法。因此他们只检查方法是否存在,如果存在则调用它。

至于目标,他们首先检查哪个元素得到了这个事件。如果它是当前滑块,他们将忽略该事件。