2014-11-06 39 views
0

我有一个关于JavaScript中的"onclick"函数的问题。在这里,我有一个div "InfoBar"Javascript onclick参数

<div id="InfoBar"><br> 

和两个用于循环

var src = new Array(); 

for(var i = 0; i < 2; i++){ 
    src.push("el1","el2"); 
} 

for(var j = 0; j < 2; j++){ 
    doesFileExist(src[j]); 
} 

和doesFileExist()和克利克功能

function klick(el){ 
    alert(el) 
} 

function doesFileExist(urlToFile){ 
    document.getElementById('InfoBar').innerHTML += '<br>' + '<a id="css" onclick="klick(urlToFile)" href="#" title="'+urlToFile+'">' + "link1 : " + urlToFile + '</a>'; 
} 

现在我已经在"a href"增加了一个"onclick"功能。

如果我点击“link1:el1”,我想显示为警报"urlToFile"字符串。 但我不工作。

"a href"title="'+urlToFile+'"它工作完美,但在"onclick"不起作用。

任何人都可以帮助我吗? 在此先感谢。

+0

克利克火警?我怀疑你是klick函数,期望在通过事件调用时未定义的“el” – Liath 2014-11-06 10:29:12

+0

发布你的'klick(urlToFile)'函数的代码或创建一个[http://jsfiddle.net/ ](http://jsfiddle.net/) – Victor 2014-11-06 10:29:55

+0

我必须是**唯一** - 'id =“css”'至少设置两次 – Andreas 2014-11-06 10:31:24

回答

1

您正在生成一个属性。这被转换回一个函数,但范围被打破。

  • 请勿使用固有事件属性。
  • 尽量少用全局
  • 避免糖化串在一起生成HTML的(最好是难以阅读,在最坏的情况,你会发现这类问题)

使用标准DOM:

var container = document.getElementById('InfoBar'); 
container.innerHTML = ""; // Delete any existing content 
container.appendChild(document.createElement('br')); 
var anchor = document.createElement('a'); 
anchor.setAttribute('id', 'css'); // You are running this function is a loop and creating duplicate ids. Use a class instead. 
anchor.addEventListener('click', function (event) { 
    klick(urlToFile); // the local variable urlToFile is still in scope 
}); 
anchor.setAttribute('href', '#'); // Why are you linking to the top of the page? Use a <button> 
anchor.setAttribute('title', urlToFile); 
anchor.appendChild(document.createTextNode("link1 : " + urToFile)); 
container.appendChild(anchor); 
+0

谢谢,这真的很有帮助 – aldimeola1122 2014-11-06 11:47:29

0

以这种方式分配的事件句柄不起作用。你必须使用JavaScript事件句柄。意思是,你必须创建一个新的'a'元素,然后将一个click事件绑定到它,然后将它作为一个子元素附加到父节点。所有这些东西在网页上都有很好的描述。