2012-10-26 41 views
6

我想传递参数,当我在<a href>点击,第一次我有这样和正常工作:如何通过参数与href和功能的onclick

<a href="#" rel="like{{num}}"> I like </a>| 

    $("a[rel^='like']").click(function(){ 
      $.ajax({ 
       ... 
      }); 

,但我不知道如何参数传递到该函数,所以我这样做:

<a href="#" rel="like{{num}}" 
      onclick="cap(para1, para2)"> I like </a> 

最后,在我的JavaScript我有这个简单的功能:

function cap(para1, para2){ 
     alert('here'); 
    } 

但我获得此错误:

ReferenceError: cap is not defined 

任何想法?

+0

这个'cap'函数是否在'$(document).ready()'回调中? – Blender

回答

6

一个解决方案是使用data attributes

<a href="#" rel="like{{num}}" data-para1="Oh" data-para2="{{somepara}}"> I like </a> 

<script> 
function cap(para1, para2){ 
    alert('here'); 
} 
$("a[rel^='like']").click(function(){ 
    var para1 = this.dataset['para1']; 
    var para2 = this.dataset['para2']; 
    cap(para1, para2); 
}); 
</script> 

你也可以把它写这样的,如果你喜欢更结构化的方法:

<a href="#" rel="like{{num}}" data-params="{'para1':'Oh','para2':'{{somepara}}'}"> I like </a> 

$("a[rel^='like']").click(function(){ 
    var params = this.dataset['params']; 
    var para1 = params.para1; 
    var para2 = params.para2; 

注意,如果该文件是不是HTML5您必须使用更兼容的data function of jQuery(但几乎没有任何理由不使用HTML5 doctype):

var para1 = this.data('para1'); 
+1

答案有点令人误解,因为似乎“数据”属性与jQuery相关,而它已被引入HTML5文档。因此,如果他使用HTML5,该解决方案将提供有效的标记。当然,它也适用于非HTML5标记。 – JeanValjean

+0

@JeanValjean +1您说得对,您可以使用数据集属性。我将编辑以删除提及的jQuery。感谢您指出这一点。 –

3

您可能想试试这个。

<a class="ilike" href="javascript:;" data-p1="abc" data-p2="123"> I like </a> 

<script> 
    function cap(para1, para2){ 
     alert('here'); 
    } 

    $(function(){ 
     $('.ilike').click(function(){ 
      var $this = $(this); 
      var p1 = $this.data('p1'); 
      var p2 = $this.data('p2'); 
      cap(p1, p2); 
     }); 
    }); 

</script> 
0

如果您想通过的onclick,它这样做,要么1)已宣布在错误的范围的功能或2)的函数声明之前发生其他JS错误,并导致它不会被执行。

要解决范围的问题,你可以尝试做window.cap = function(para1, para2) { ...

要查看是否有任何错误,尝试像萤火虫或任何浏览器的开发工具和检查下控制台错误。