Html代码:
<a id='link1' href='#' name='john' >test</a>
<br/><br/>
<a id='link2' href='#' name='john' onclick="showName();">test</a>
<br/><br/>
<a id='link3' href='#' name='smith' onclick="showName();">test</a>
JScript代码:
$(function()
{
$('#link1').on('click', function(){
alert($(this).attr('name'));
});
}
)
function showName()
{
alert($(this).attr('name'));
}
它的小提琴: http://jsfiddle.net/eS7Mv/7/
为什么第二个和第三个链接不起作用? 顺便说一句,由于某些原因,我需要使用命名函数。 所以我知道:
$('a').on('click', function(){
alert($(this).attr('name'));
});
或者
$('.TargetClass').on('click', function(){
alert($(this).attr('name'));
});
以某种方式解决问题,但我确实需要使用命名函数和访问超链接属性。
<小时/>
答案 0 :(得分:3)
使用此代码
html代码
<a id='link1' href='#' name='john' >test</a><br/><br/>
<a id='link2' href='#' name='john' onclick="showName(this);">test</a><br/><br/>
<a id='link3' href='#'name='smith'onclick="showName(this);">test</a>
jquery代码是
function showName(obj)
{
alert($(obj).attr('name'));
}
答案 1 :(得分:2)
试试这个
演示小提琴http://jsfiddle.net/eS7Mv/18/
<a id='link1' href='#' name='john' >test</a>
<br/><br/>
<a id='link2' href='#' name='john' onclick="showName(this);">test</a>
<br/><br/>
<a id='link3' href='#' name='smith' onclick="showName(this);">test</a>
<script>
function showName(element)
{
alert($(element).attr('name'));
}
</script>
通过调用showName(this)
,您将当前元素传递给函数。
修改2
答案 2 :(得分:1)
第二个和第三个链接不起作用,因为在你的javascript函数中“this”指定当前对象,所以当时javascript找不到当前对象,所以你必须在函数参数中传递“this”。
答案 3 :(得分:1)
只看小提琴:fiddle
你应该传递一个参数,然后在函数
中使用这个参数function showName(pthis)
{
alert($(pthis).attr('name'));
}
<a id='link3' href='#' name='smith' onclick="showName(this);">test</a>
答案 4 :(得分:1)
尝试这样的事情
html
<a id='link3' href='#' name='smith' onclick="showName(this);">test</a>
的javascript
function showName(obj)
{
alert(obj.name);
//or
alert($(obj).attr('name'));
}
答案 5 :(得分:0)
以下是更新的working code
=&gt; http://jsfiddle.net/eS7Mv/13/
您需要在JQuery访问的所有元素之间保留一些公共属性,然后将事件绑定到那些
根据您的评论,您可以使用命名函数。如果我能为您提供更多代码,请与我们联系。
$(function()
{
$('.click').on('click', showName );
}
)
function showName()
{
alert($(this).attr('name'));
// alert("Hello World");
}
这是更新的小提琴 =&gt; http://jsfiddle.net/eS7Mv/26/
答案 6 :(得分:0)
这是jQuery的一个特性,像这样绑定的函数中的'this'将:
如果正在调用的函数是使用Function.bind()创建的,那么 将是当时传递给.bind()的第一个参数 功能已创建。
你的其他内联函数不起作用,因为'this'是当前执行的上下文(我认为这个窗口)。
如果你真的需要使用命名函数,可以这样做:
$(function()
{
$('#link1').on('click', function(){
showName($(this));
});
}
)
function showName(clickedLink)
{
alert(clickedLink.attr('name'));
}
小小提琴说明了其中一些:
答案 7 :(得分:-1)
如果您的所有代码都以link
开头,那么您可以这样做
$('[id^=link]').on('click', function(){
alert($(this).attr('name'));
});
<强> Working Demo 强>
答案 8 :(得分:-1)
您正在寻找e.target.node
,所以:
$('body').on('click', function(e){
alert(e.target.name);
});
简化你的生活。
此外,如果您不希望它为整个body
运行,那么您也可以这样做:
$('#link1, #link2, #link3').on('click', function(e){
您之前的代码无效的原因是因为规则。在jQuery文档中,声明“如果调用的函数是使用Function.bind()创建的,this
将是创建函数时传递给.bind()的第一个参数。”在你的情况下,我认为它未定义。
使用Chrome中的控制台功能,我证明是对的。看一下这个截图,试着了解发生了什么。你看到你做错了吗?
当引发事件时,例如点击事件,它们会携带重要的信息和参考资料。在单击事件中,事件对象具有对目标的引用。使用此方法,您可以获取引发事件的元素的id。
答案 9 :(得分:-1)
只有当JS代码位于此html标记之前,或者找不到指定的函数时,onclick
属性才有效。
在您的示例中,这有效:http://jsfiddle.net/eS7Mv/20/
但jQuery是更好的方式,例如:
$('a').click(function(){
alert($(this).attr('name'));
});