使用EventArgs传递参数

时间:2011-04-25 22:16:24

标签: javascript asp.net jquery

我想知道是否可以将参数传递给从AJAX扩展器调用的javascript事件(在本例中为AutoComplete),同时保留EventArgs也被传递。以下是我的意思的简短示例:

<... OnClientItemSelected="DoThis(somevar, eventargs);" />

脚本:

function DoThis(somevar, eventargs) {
   var blah = somevar;
   ...
   var blah2 = eventargs.get_text();
}

这就是主意。有谁知道怎么做或者有可能吗?

1 个答案:

答案 0 :(得分:1)

目前还不清楚你的要求是什么,但是......无论如何我都会捅它。听起来你本质上想要增加传递给事件处理程序的事件数据。有很多方法可以做到这一点:

如果您使用的是jQuery:

首先,可以使用2或3个参数调用bind()方法:

  • bind( eventName , eventHandler )
  • bind( eventName , data , eventHandler )

如果使用3个参数调用bind(),则第二个参数data是作为.data实例的Event属性传递给事件处理程序的任意对象传递给事件处理程序。

其次,事件处理程序是一个闭包,其词法范围包括在创建闭包时在范围内的变量。例如,将事件处理程序绑定到jQuery中的事件的常用方法是这样的:

$(function(){

   var pi = 3.1415926 ;

   var phoneticAlphbet = { a = "alpha" , b = "bravo" , c = "charlie" ,
                           ...
                           x = "x-ray" , y = "yankee" , z = "zulu"
                         } ;

  $('input:radio[name=buttonset1]').click(function(){
    // at this point, the variables pi and phonetic alphabet are in-scope,
    // as well as any other globals you've created

    // do something here
  }) ;

}) ;

这是将数据传递给事件处理程序的第二种方法。

第三种方法是从DOM树元素挂起数据。 jQuery方便地提供data()方法来执行此操作:

  • .data( name , value )在包装集上设置值
  • .data( name )从包装集中检索值

例如,此代码段将保存页面上每个元素的原始值:

$('input,select').each(function(){
  var item = $(this) ;
  item.data( 'original-value' , item.val() ) ;
}) ;

设置后,可以检索该值:

$('input#password').change(function(){
  var item = $(this) ;
  var oldValue = item.data('original-value') ;
  var newValue = item.val() ;
  if ( oldValue == newValue )
  {
    alert('the new password must be different than the old password!') ;
  }
}) ;