2009-02-10 71 views
0

我正在使用jQuery和JavaScript。我有一個調用JavaScript函數的onclick事件。我如何在jQuery中提取function_A和function_B的參數?jQuery中的JavaScript函數參數

這是最好的方法嗎?

我需要在JavaScript單擊後執行Ajax調用。使用jQuery有沒有任何性能問題?

我的代碼:

<html> 
    <head> 
     <script src="http://code.jquery.com/jquery-latest.js"></script> 
     <script> 
      $(document).ready(function(){ 
       //Here need to extract the JavaScript function arguments 
       var id1=from_javascript_function_A 
       var id2=from_javascript_function_B 

       var link1=from_javascript_function_A 
       var link2=from_javascript_function_B 
       // 
     </script> 
    </head> 
    <body> 
     <a href='#' onclick=javascript:function_A('first',1)>link1</a> 
     <a href='#' onclick=javascript:function_B('second',2)>link2</a> 
    </body> 
</html> 

回答

3

這樣的事情呢?

<script> 
     $(document).ready(function(){ 
      $("a.a").click(function(e){ 
       DoWork('a',1,function_a); 
      }); 
      $("a.b").click(function(e){ 
       DoWork('b',2,function_b); 
      }); 
     }); 

     function DoWork(s,i,f){ 
      f(s,i); 
      alert("after click:" + s + " " + i); 
     } 

     function function_a(s,i){ 
      alert("a:" + s + " " + i); 
     } 
     function function_b(s,i){ 
      alert("b:" + s + " " + i); 
     } 

    </script> 

</head> 
<body> 

    <a href="#" class="a">a</a> 
    <a href="#" class="b">b</a> 
</body> 
0

如果你真的想從函數調用中提取的參數,你需要做一大堆手工解析,例如,

$("a").each(function(){ 
    var onclicktext = $(this).attr("onclick"); 
    if(onclicktext.indexOf("function_A") > -1){ 
    // Do more parsing here 
    } 
    if(onclicktext.indexOf("function_B") > -1){ 
    // Do more parsing here 
    } 
}); 
0

函數的參數只能在該功能中可見。通常它們是變量,它們的值只有在調用函數時纔有意義(在您的示例中,單擊相應的鏈接時)。在$(document).ready之內,它們的值不相關。

如果參數不是變量,它們是已知的,您不會問這個問題。

0

如果您不能編輯HTML代碼,那麼你可以做的是一些醜陋的黑客:

$("a").each(function(){ 
    fnStr = ($(this).attr('onclick')).toString(); 
    re = /\"[^\"]+\"/ 
    alert(re.exec(fnStr)); 
    re = /\'[^\"]+\'/ 
    alert(re.exec(fnStr)); 
}); 

上面的代碼使用regular expressions獲得報價之間的參數。自己嘗試一下;不同的瀏覽器可能會有不同的行爲。