1 回答

TA貢獻1804條經驗 獲得超8個贊
該屬性是以下位置的 setter/getter:onmouseoverHTMLElement.prototype
var myP = document.getElementById("p-id");
const descriptor = Object.getOwnPropertyDescriptor(HTMLElement.prototype, 'onmouseover');
console.log(descriptor);
console.log(descriptor.get.call(myP));
<p id="p-id" onmouseover="console.log('fn')">Text Text</p>
當 getter 被調用時,它將返回以前使用 setter 附加的處理程序,例如,或者它將返回內聯處理程序函數。elm.onmouseover = someFn
在上面的代碼中,處理程序既不是內聯的,也不是通過調用 setter 附加的,因此訪問元素的屬性將返回 ,這不能被調用。onmouseovernull
在下部代碼中,處理程序是內聯的,因此它通過訪問調用 getter 的屬性來返回。onmouseover
最好永遠不要使用內聯處理程序,它們有太多的問題不值得使用,并且也不要通過屬性附加處理程序(因為這樣,如果另一個腳本嘗試將處理程序附加到同一元素,它將覆蓋早期的處理程序)。.on
如果要觸發剛剛附加的偵聽器函數,可以先將該函數保存在變量中,然后調用它:
var myP = document.getElementById("p-id");
const fn = () => myP.style.backgroundColor = "red";
myP.addEventListener("mouseover", fn);
fn();
<p id="p-id">Text Text</p>
或者通過 DOM 將事件調度到元素:
var myP = document.getElementById("p-id");
myP.addEventListener("mouseover", () => myP.style.backgroundColor = "red");
myP.dispatchEvent(new Event('mouseover'));
<p id="p-id">Text Text</p>
添加回答
舉報