2012-03-25 42 views
0

我想動態地製作可點擊的div。我已經插入了測試功能。即使div沒有被點擊,測試函數也會運行。謝謝你的幫助。在javascript中單擊可點擊

function displayResults(responseTxt) 
    { 
     var results = document.getElementById("results"); 
     jsonObj = eval ("(" + responseTxt + ")"); 
     var length = jsonObj.response.artists.length; 
     results.innerHTML = "Please click on an artist for more details: " 

     for (var i = 0; i < length; i++) 
     { 
      var entry = document.createElement("div"); 
      var field = document.createElement("fieldset"); 

      entry.id = i; 
      entry.innerHTML = i + 1 + ". " + jsonObj.response.artists[i].name; 
      field.appendChild(entry); 
      results.appendChild(field); 
      //entry.addEventListener("click", idSearch(jsonObj.response.artists[i].id), false); 
      entry.addEventListener("click", test(), false); 

     } 
    } // end function displayResults   

    function test() 
    { 
     document.getElementById("results").innerHTML = "tested"; 
    } 

回答

1

您呼叫的test()功能和它的返回值傳遞給.addEventListener()。刪除括號:

entry.addEventListener("click", test, false); 

因此,您將函數本身傳遞給.addEventListener()

這回答了詢問,但預測你的下一個問題,你有註釋掉你會做這行:

entry.addEventListener("click", 
         function() { 
          idSearch(jsonObj.response.artists[i].id); 
         }, false); 

也就是說,創建一個匿名函數傳遞給.addEventListener()匿名函數知道如何用參數調用你的idSearch()函數。除了這將不起作用,因爲當事件被實際觸發時,i將具有來自循環結束的值。您需要添加額外的功能/關閉,這樣的i的各個值都可以訪問:

for (var i = 0; i < length; i++) 
    {   
     var entry = document.createElement("div"); 
     var field = document.createElement("fieldset"); 

     entry.id = i; 
     entry.innerHTML = i + 1 + ". " + jsonObj.response.artists[i].name; 
     field.appendChild(entry); 
     results.appendChild(field); 
     // add immediately-invoked anonymous function here: 
     (function(i) { 
      entry.addEventListener("click", 
           function() { 
            idSearch(jsonObj.response.artists[i].id); 
           }, false); 
     })(i); 
    } 

這樣在jsonObj.response.artists[i].idi實際上將是從匿名函數的參數i這是個人價值i從每次迭代運行時的循環開始。

+0

非常感謝。這工作 – Tonya 2012-03-25 01:18:12