2009-11-17 83 views
8

我試圖將事件綁定到包含參數的textbox。以下看起來好像應該這樣做,但每次頁面加載時,它都會被執行。jQuery使用參數綁定和解除綁定事件

jQuery(function(){ 
    jQuery('#textbox').bind('click', EventWithParam('param')); 
}); 

每次加載頁面時都會使用該參數調用該事件。這可能不起作用,因爲具有參數的事件不受支持。如果是這樣,是否有另一條路線?

回答

10

要綁定一個帶參數的函數,請使用匿名函數作爲參數的閉包。

jQuery(function($) { 
    var param = 'text'; 
    $('#textbox').click(function() { 
     EventWithParam(param); 
     // or just use it without calling out to another function 
     $(this).text(param); 
    }); 
}); 

您的示例正在執行EventWithParam函數,然後嘗試綁定到該函數調用的結果。

在未指定函數的情況下調用unbind將取消綁定指定類型事件(包括匿名函數)的所有處理程序。如果你想明確解綁功能,你需要爲它提供一個名稱,如:

jQuery(function($) { 
    var param = 'text', 
     clickCallback = function() { 
      EventWithParam(param); 
      // or just use it without calling out to another function 
      $(this).text(param); 
     }; 
    $('#textbox').click(clickCallback); 
}); 
1

的原因是EventWithParam被稱爲在你的綁定功能就在那裏。換句話說,您將點擊事件綁定到調用EventWithParam('param')結果。這應該工作:

jQuery('#textbox').bind('click',function(){EventWithParam('param')}); 

現在你已經綁定的甚至,當事件觸發,將調用EventWithParam('param')

+0

如果我再做解除綁定,將它取消綁定匿名函數? jQuery('#textbox')。unbind('click');? – 2009-11-17 19:21:24

+0

是的。請參閱[http://docs.jquery.com/Events/unbind#typefn] – Dan 2009-11-18 18:30:58

+0

這對我不起作用? – 2015-06-16 12:10:45

0
jQuery(function() { 
    jQuery('#textbox').click(function() { 
     EventWithParam(param1,param2,...,paramN); 
    }); 
}); 

function EventWithParam(param1,param2,...,paramN) { 
    doSomething...; 
    ...; 
} 
4

bdukes是完全正確的函數。我添加了我的回覆,因爲我最近發現了一些與jQuery的綁定/解除綁定函數和匿名函數及其事件名稱空間有關的有趣事情。以前在綁定事件上方顯示的內容如下所示。

jQuery('#textbox').bind('click',function(){EventWithParam('param')});

解除綁定這甚至用戶必須撥打...... jQuery('#textbox').unbind('click');

實際上,刪除所有的onclick事件。

現在進入jQuery名稱空間。如果你有一個匿名函數,你希望附加到點擊事件,然後解除綁定,如下所示。

jQuery('#textbox').bind('click.yourNameSpace',function(){EventWithParam('param')});

然後解除綁定簡單的通話將解除綁定功能如下。

jQuery('#textbox').unbind('click.yourNameSpace');

您的onclick事件的其餘部分將保持不變。

11

您可以將事件參數作爲第二個參數傳遞給bind()。它不是直接回調指標的影響,但也許你想使用它:

從jQuery的文檔: bind

function handler(event) { 
    alert(event.data.foo); 
} 
$("p").bind("click", {foo: "bar"}, handler) 
+0

definatly我會使用的東西 – 2011-05-17 17:27:03

+0

在handler()函數中,可以通過事件「data」字段訪問該對象:function handler(evt){var fooValue = evt.data.foo; } – SCO 2012-04-17 08:33:48