2013-08-29 88 views
3

我必须编写一个函数,它将创建一个代码为a的HTML代码,并且此函数还会将一个函数处理函数传递给onclick事件的创建a标记。 代码:javascript传递函数到onclick事件

function a(text,functionHandler){ 
    return '<a href="#" onclick="'+functionHandler+'">'+text+'</a>'; 
} 

//usage 
var a1 = a('link',function(){ 
    alert('test'); 
}); 

传递函数串不起作用。 所以我的问题是:how to pass a function handle to onclick event and get a HTML code of created a tag?

+0

功能是保留关键字,用别的像functionName。 – BenM

+0

你试过我最近的更新吗?此外,您应该更改问题的标题,以便更准确地确定您需要返回将包含事件功能的HTML代码。 – kube

回答

0
 function a(text,function){ 
     return '<a href="#" onclick="myfunction();">'+text+'</a>'; 
    } 

    function myfunction() { 
     alert('test'); 
    } 
3

您当前的做法有几个问题 -

  1. function是一个关键词。您不能将其用作参数。
  2. 你使用它的方式,你需要在这里函数名称。传递回调将无济于事。

而不是返回你的锚为一个字符串,返回它作为一个元素 -

function createAnchor(text, clickHandler) { 
    var link = document.createElement('a'); // creates an anchor element 
    link.href = "#";       // sets the href 
    link.onclick = clickHandler;    // sets the click handler 
    link.innerHTML = text;      // assigns the inner html string 

    return link;        // now return it 
} 

,然后 -

var myAnchor = createAnchor('link', function() { 
    alert('test'); 
}); 

// Add this element wherever you want 

查看createElementelement的文档。

编辑

如果你想这种定位的元素添加到现有的DOM元素作为一个孩子,使用appendChild -

var myAnchor = createAnchor('link', function() { 
    alert('test'); 
}); 

document.getElementById('x').appendChild(myAnchor); 

Live JSFiddle

EDIT 2

如果你真的想你的锚绳,然后创建使用上述功能定位元素,将其追加为孩子你想要的元素,然后父用innerHTML。该方法是这里展示 -

function createAnchorString(parentId, text, clickHandler) { 
    var link, 
     parent; 

    link = createAnchor(text, clickHandler); // call the previous function 
    parent = document.getElementById(parentId); 
    parent.appendChild(link); 

    return parent.innerHTML; 
} 

var myAnchorString = createAnchorString('x', 'link', function() { 
    alert('test'); 
}); 

alert(myAnchorString); 

Live Fiddle

+0

http://jsfiddle.net/dejwid/aswXT/ ,正如你可以看到它不具有匿名函数 – David

+0

@大卫工作:见我的编辑。 –

+0

是的,你的小提琴作品,但我需要创建'了'标签 – David

1

你可以尝试这样的:

function a(text, callback) 
{ 
    var obj = document.createElement("a"); 

    obj.textContent = text; 
    obj.onClick = callback; 
    return obj.outerHTML; 
} 

的问题是:它会如何处理回调参数传递的匿名函数?

编辑 这应该现在的工作:

function a(text, callback){ 
    return '<a href="#" onclick="if(!this.fireFunc)this.fireFunc=' 
      + callback.toString() 
      + ';this.fireFunc();">'+text+'</a>'; 
} 

刚上了一个匿名函数使用的toString()允许您以获得它的代码。

这是一个非常hackish的方式,并命名功能不工作(这不会是现在很难使其工作)。

FIDDLEhttp://jsfiddle.net/gZ3YD/1/

+0

不起作用http://jsfiddle.net/dejwid/gZ3YD/ – David

+0

我修改了我的答案,使其工作。 – kube