鍍金池/ 問答/PHP  HTML/ 新手求問,關于js function調(diào)用的問題

新手求問,關于js function調(diào)用的問題

目前,我在寫js代碼時,將js文件分為兩類:一是所有頁面都要調(diào)用一些function的公共文檔;二是頁面單獨要用到的功能文檔。
我在公共文檔里寫了window.onload=function(){};在功能文檔里針對每個功能寫一個function,然后在HTML要用到的地方調(diào)用如:onclick="XXX(){}",但是有些是多個標簽用到同一個功能如下方代碼:

`<ul>
<li>111</li>
<li>222</li>
<li>333</li>
<li>444</li>
</ul>`

<script>
var test=document.getElementByTagName('li');
for (j = 0; j < test.length; j++) {
        test[i].onclick=function(){}
</script>

在這種情況下,需要把代碼寫成一個function嗎?如果寫成了function,難道要給每個li標簽都麻煩的調(diào)用嗎?而且引入公共文檔里面已經(jīng)有一個window.onload了。如果不寫functon的話有會顯得代碼很亂。

說了這么多,其實就是想知道大家在寫js代碼時是如何分類?在已經(jīng)有一個wiondow.onload的情況下怎么調(diào)用其他的function?

回答
編輯回答
下墜
  1. 對于監(jiān)聽 ul 下所有 li 這種需求,一般是監(jiān)聽 ul 的事件,然后通過 event.target 之類的方式去獲取真正觸發(fā)事件的元素,這個涉及 DOM 的事件機制,你可以了解一下。
  2. 一般來說不寫 window.onload 這種形式,我個人是這樣的:
(function(window, document, undefined) {
    ...
})(window, document, undefined)

很多規(guī)范寫法都是要慢慢積累的,你也可以直接看各網(wǎng)站那些未被混淆的 js 文件來快速了解。

2017年3月19日 05:38
編輯回答
練命

不用for遍歷,直接例如這樣:$('ul>li').bindclick..
$('ul>li')就代表ul下所有l(wèi)i了。你百度一下“Js選擇器”,基礎多學一下。

2018年6月7日 01:23
編輯回答
墨沫

習慣用jQ,所以思路是jQ式的:比如Demo里這段,因為script標簽是位于body結束前的,所以省掉個DOMContentLoaded事件,當然也不用寫onload。另外這個click一般還是會寫事件監(jiān)聽,而不用onclick。事件監(jiān)聽里直接用表達式就好,不會單獨聲明函數(shù)除非需要復用。另外這個不會用for,會用事件代理的方式來寫。

2017年6月8日 20:41
編輯回答
糖果果

那個for循環(huán)用事件委托寫法就好了

var Ul = document.getElementById("ul");
  Ul.onclick = function(ev){
    var ev = ev || window.event;
    var target = ev.target || ev.srcElement;
    if(target.nodeName.toLowerCase() == 'li'){
            alert(123);
            <!--你的function-->
    }
  }
2018年6月28日 22:09