分配Anchor标签以动态调用Javascript函数

时间:2011-11-23 06:51:05

标签: javascript jquery

我正在动态创建<span class="infa9span"><img src="/csm/view/include/images/foldericon.png"/><a id="infa9Service">'+servicename+'</a><br/></span>代码列表并将其附加到div

然后使用下面的地图将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 v1.6.3

但是当我点击任何a标签时,它会调用函数并执行函数内的所有操作,但在Object dosen't support this porperty or method函数中会出现错误treeItemClickHandler。 / p>

我想知道,

  1. 如何避免出现此错误?
  2. 这样的事情有更好的方法吗?
  3. 这是我正在使用的第一类功能(如果是这样,我可以在哪里了解更多信息)?
  4. 感谢。

    更新

    如何传递第二个参数?

    '<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 个答案:

答案 0 :(得分: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 part:

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?
}