請問有可能讓document 中的所有物件,不管是text or textarea or div etc..,只要有dblclick就先去執行一個validation的function,當validation 回傳true時,才執行原element所設定的ondblclick事件。
dblclick 有可能是寫html inline script,也有可能是透過jquery 的on 方法binding的。
像這樣?
感覺很浪費資源就是了。
<body>
<form action='#'>
<input type='text' ondblclick='console.log("text ondblclick")'/>
<input type='submit' value='test' />
</form>
</body>
<script type="text/javascript">
window.onload = function() {
// 所有物件
var allElements = document.getElementsByTagName("*");
// 自行改條件來取得要被加function的element
for (var i = 0; i < allElements.length; i++) {
let element = allElements[i];
let originalFunction = element.ondblclick;
if (typeof originalFunction !== "function") {
originalFunction = function() {};
}
element.ondblclick = function(event) {
// do something
console.log(element.tagName + " dblclicked!");
// 先看某個驗證function是否回傳 true
if (true) {
// 再執行原本寫好的 ondblclick
originalFunction();
// 停止事件冒泡
event.stopPropagation();
}
}
}
}
</script>
加入這段script執行後,console印出的順序是
text ondblclick
addon obdblclick
但我需要的功能是要先印出addon ondblclick再印出text ondblick
請問這有辦法達成嗎?
<script type="text/javascript">
var allElements = document.getElementsByTagName("*");
for (var i = 0; i < allElements.length; i++) {
let element = allElements[i];
element.ondblclick = function(event) {
// do something
console.log("addon dblclicked!");
// 停止事件冒泡
event.stopPropagation();
}
}
</script>
</head>
<body>
<form action='#'>
<input type='text' ondblclick='console.log("text ondblclick")'/>
<input type='submit' value='test' />
</form>
</body>
我有編輯回答了,你試試看
可以了 感謝