我動態創建的<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
。
我想知道,
- 如何避免這個錯誤?
- 有沒有更好的方法來解決這個問題?
- 是我使用的第一類功能(如果是的話,我可以在哪裏瞭解更多)?
謝謝。
更新
我怎樣才能通過第二個參數?
'<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
目前尚不清楚你要完成的任務。這聽起來像你有一個每個元素ID的函數。爲什麼不直接使用該函數作爲點擊處理程序?元素標識必須是唯一的。你是否對多個元素使用相同的ID? – gilly3
函數是否在與idMap相同的作用域中定義?將'alert(id)'或'console.log(id)'作爲'treeItemClickHandler'的第一行,並確認您獲得了您期望的id值。如果你在那個時候得到一個有效的ID,我希望它能工作。 ''(idMap [id])'不需要括號,但它應該可以使用或不使用它們。 – nnnnnn
@ gilly3:同樣的id也是允許的,因爲我還需要傳遞2個參數'id'和'servicename',所以只要它是相同的函數,它就會根據'servicename'來區分。由於有很多功能,我認爲這張地圖是一個簡單的方法來跟蹤所有的功能 – abi1964