2011-11-23 48 views
0

我動態創建的<span class="infa9span"><img src="/csm/view/include/images/foldericon.png"/><a id="infa9Service">'+servicename+'</a><br/></span>標籤列表並將其附加到一個div勘定錨標籤的調用JavaScript函數動態

然後使用下面的地圖,地圖a標籤屬性的一些功能

var idMap = { 
      //it can be a lot more 
      "javaInfo":javaInfo, 

      /*infa9 product map*/ 
      "infa9PMServer":infa9PMServer, 
      "infa9Service":infa9Service 
     }; 

這是單擊處理

$('#ds-accordion a').click(function(event) { 
    var elementId=$(this).attr("id"); 
    treeItemClickHandler(elementId); 
}); 

function treeItemClickHandler(id) 
{ 
    (idMap[id])(id); //Is this usage called 1st class functions? 
} 

function infa9Service(id) 
{ 
    alert("i got this "+id); 
} 

注意:我使用jQuery 1.6.3版本

但是,當我點擊a標籤中的任何一個時,它會調用函數an並執行函數中的所有操作,但在treeItemClickHandler函數中給出錯誤Object dosen't support this porperty or method

我想知道,

  1. 如何避免這個錯誤?
  2. 有沒有更好的方法來解決這個問題?
  3. 是我使用的第一類功能(如果是的話,我可以在哪裏瞭解更多)?

謝謝。

更新

我怎樣才能通過第二個參數?

'<span class="infa9span"><img src="/csm/view/include/images/foldericon.png"/><a id="infa9Service" title='+servicename+'>'+servicename+'</a><br/></span>' 

$('#ds-accordion a').click(function(event) { 
    var elementId=$(this).attr("id"); 
    var elementName=$(this).attr("title"); 
    treeItemClickHandler(elementId,elementName); 
}); 

function treeItemClickHandler(id,name) 
{ 
    idMap[id](id,name); 
} 

function infa9Service(id,name) 
{ 
    alert(id+", "+name); 
} 

它給了我infa9Service, undefined

+1

目前尚不清楚你要完成的任務。這聽起來像你有一個每個元素ID的函數。爲什麼不直接使用該函數作爲點擊處理程序?元素標識必須是唯一的。你是否對多個元素使用相同的ID? – gilly3

+0

函數是否在與idMap相同的作用域中定義?將'alert(id)'或'console.log(id)'作爲'treeItemClickHandler'的第一行,並確認您獲得了您期望的id值。如果你在那個時候得到一個有效的ID,我希望它能工作。 ''(idMap [id])'不需要括號,但它應該可以使用或不使用它們。 – nnnnnn

+0

@ gilly3:同樣的id也是允許的,因爲我還需要傳遞2個參數'id'和'servicename',所以只要它是相同的函數,它就會根據'servicename'來區分。由於有很多功能,我認爲這張地圖是一個簡單的方法來跟蹤所有的功能 – abi1964

回答

1

檢查了這一點http://jsfiddle.net/ywQMV/4

1)定義的功能。

2)定義你的id地圖。

HTML的一部分:

<div id ="ds-accordion">  
    <span class="infa9span"> 
     <img src="/csm/view/include/images/foldericon.png"/> 
     <a id="infa9Service" title='+servicename+'>'+servicename+'</a> 
     <br/> 
    </span> 

JS部分:

function infa9Service(id, serviceName) 
{ 
    alert("i got this "+id +" serviceName : " + serviceName); 
} 


var idMap = { 
      "infa9Service":infa9Service 
     }; 

$('#ds-accordion a').click(function(event) { 
    var elementId=$(this).attr("id"); 
    var serviceName = this.title; 
    treeItemClickHandler(elementId, serviceName); 
}); 

function treeItemClickHandler(id,serviceName) 
{ 
    // alert(idMap[id]) 
    (idMap[id])(id,serviceName); //Is this usage called 1st class functions? 
} 
+0

爲什麼你必須先定義函數?函數語句被掛起... – nnnnnn

+0

@erimerturk:沒關係,我怎麼能通過'servicename'這些函數,就像在傳遞2參數? – abi1964

+0

我更新它,再次檢查它。 – erimerturk