2012-01-26 30 views
6

传递给javascript函数我知道这是基本的,但我完全无法将“this”作为参数传递给JavaScript函数。我试图麻木...如何将参考'this'从<a>标记

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Untitled Document</title> 
<script language="javascript" type="text/javascript"> 
    function ko(control.id){ 
    alert(control); 
} 
</script> 

<body> 
<div id"lala"> 
    <a id="la" href="javascript:ko(this)" >Votes & Concerns</a> 
</div> 

</body> 
</html> 

该警报告诉我“undefined!”

+0

你究竟想要做什么?你想让它警觉(“投票和关注”)?无论如何,您可以先将“la”作为字符串传递,然后使用getElementByID(“la”)将标记作为DOM对象传递。 – btown 2012-01-26 22:58:09

+0

我试图使用Dom层次结构来发现屏幕中多个DIV的ID。 – DKean 2012-01-27 00:13:41

回答

11
<a id="la" href="#" onclick="ko(this); return false;" >Votes & Concerns</a> 
+0

您的解决方案是唯一一个有效的工作!荣誉,但主要是谢谢你。但请告诉我什么是“返回假”;是关于? – DKean 2012-01-26 23:30:08

+0

我假设javascript函数返回到调用,但是在哪里可以调用返回?我删除了返回false;它仍然有效!但我是新手......也许我错过了一些东西...... – DKean 2012-01-26 23:34:24

+3

对于一般情况下的事件,如果你'返回false';'它将阻止事件的默认行为继续前进。使用锚标记和点击事件时,默认操作是导航到指定的“href” - 在这种情况下,ori已将其设置为“#”,以便它将保留在当前页面上,但如果不返回“false”浏览器通常会回滚到当前页面的顶部。 – nnnnnn 2012-01-26 23:57:32

3

你明白了南辕北辙:

function ko(control){ 
    alert(control.id); 
} 

control是你与ko(this)传递对象(DOM元素的对象,要准确)。然后您需要使用control.id访问其id财产。


注意,还有更好的方法来做到这一点。最好的方法是使用Javascript块而不是HTML属性来分配事件处理程序。例如:

document.getElementById('la').onclick = function() { 
    alert(this.id); 
}; 
+0

我这样做的原因实际上是获得外部DIV的ID。 'la'id值不能被知道,但通过检查。所以我没有用“getElementById”命令。 – DKean 2012-01-26 23:21:56

+0

@DennisKean如果它是文档中的第一个'div',你可以使用'document.getElementsByTagName('div')[0] .onclick = ...'几乎肯定有一个解决方案可以让你从JS中分离JS 。 – lonesomeday 2012-01-26 23:24:26

+0

如果JS不知道html的结构和/或ID,它就不能工作。 – nnnnnn 2012-01-27 00:04:47

4

不要从“HREF”值做到这一点,从一个真正的事件处理程序的属性做到这一点:

<a id='la' href='#' onclick='ko(event, this)'> 

传中,event这样就可以防止默认解释点击浏览器正在执行的<a>

function ko(event, element) { 
    if ('preventDefault' in event) event.preventDefault(); 
    event.returnValue = false; // for IE 

    // here "element" will refer to the clicked-on element ... 
} 
+0

我得到了和我最初一样的结果。 “不确定!” – DKean 2012-01-26 23:31:33

+0

对不起 - 我会延长答案;这真的应该工作。 – Pointy 2012-01-27 00:08:21

+0

试试吧,让我知道如果你得到不同的结果... – DKean 2012-01-27 00:11:52