我想知道是否可以将参数传递给从AJAX扩展器调用的javascript事件(在本例中为AutoComplete),同时保留EventArgs也被传递。以下是我的意思的简短示例:
<... OnClientItemSelected="DoThis(somevar, eventargs);" />
脚本:
function DoThis(somevar, eventargs) {
var blah = somevar;
...
var blah2 = eventargs.get_text();
}
这就是主意。有谁知道怎么做或者有可能吗?
答案 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!') ;
}
}) ;