2013-08-29 82 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