2010-10-30 108 views
10

我通过onclick属性调用元素本身的函数,因为我需要php动态地给函数参数中的一个值赋值。当我尝试通过“$(this)”引用函数中的调用元素时,它最终引用整个窗口而不是元素。我该如何解决?Jquery:选择调用函数的元素

+2

这是一个很好的问题,虽然提供的答案提出了一些解决方法,但它们都没有解决原始问题。我也想知道答案。为什么他得到$(this)的窗口,而不是点击元素? – 2011-06-05 22:07:14

回答

6

我怀疑你真的需要使用内联onclick属性。您可以以各种不同的方式将数据存储在元素中。如果不知道你需要传递的参数是什么,很难说你会怎么做,但我会举几个例子。

最灵活的很可能是在data-属性:

<a href="#" id="subject" data-type="fiction">Text</a> 

然后,您可以访问下列方式中的信息:

$(document).ready(function(){ 
    $('#subject').click(function(){ 
     $type = $(this).data('type'); // this works as of jQuery 1.4.3, otherwise $(this).attr('data-type'); 

     // do your handling here, using $type 
    }); 
}); 

你也可以做到这一点使用类,脚本标签创建全局变量,各种方法。这几乎肯定会比将jQuery处理程序放在onclick属性中更好。

19

尝试你的元素发送作为参数传递给你的函数那样:

<input type="text" onclick="myfunction(this);"></input> 

你的功能应该是:

<script> 
    function myfunction(currentElement){ 
    // ... 
    } 
</script> 
4

的解决方案是存储在自定义属性的动态值,不是一个onclick处理程序。 HTML规范将任何以“data-”开头的属性定义为像这样的自定义数据,并且它在规范中,因此它将进行验证。所以,你可以做这样的事情(使用PHP的例子,相应调整):

<input type="text" id="some-input" data-some-dynamic="<?php echo $something; ?>"> 

然后在JavaScript检索像这样:

$(document).ready(function() { 
    $('#some-input').click(function() { 
    // $(this) -- is the input element 
    // $(this).attr('some-dynamic-attribute') -- contains the dynamic data you need 
    }); 
}); 

我觉得这个方法优于使用属性处理程序就像onclick =“”一样简单,因为从设计的角度来看它更坚固;分离问题和所有这些。

+0

感谢您深思熟虑的答案。虽然不一定是我需要的,但一个非常有趣的方法。 – 2010-10-30 08:35:46

+0

艾伦 - 这个答案和寂寞天给你的另一个选择一样。 – 2010-10-30 08:37:11

+0

这个答案最初有两种选择,但是现在所有现代浏览器都支持HTML5,所以我已经更新了答案,只包含“data-X”解决方案。 – 2011-06-08 15:44:40