我有这个HTML
<select class="category" style="margin-bottom: 5px;" onchange="getProducts('standard_product');">
正如您所见,onchange调用getProducts函数。我想知道是否有办法发送这个像
<select class="category" style="margin-bottom: 5px;" onchange="getProducts('standard_product', $(this));">
我希望与当前的选择
相关联答案 0 :(得分:7)
如果您尝试在函数中设置this
的值,则可以使用.call
:
onchange="getProducts.call(this, 'standard_product');"
现在在你的getProducts函数中,this
将是接收事件的元素。
function getProducts( prod ) {
alert( this ); // the <select> element
}
您还可以传递event
对象:
onchange="getProducts.call(this, 'standard_product', event);"
...并在你的函数中引用它:
function getProducts( prod, e ) {
alert( this ); // the <select> element
alert( e.type ); // the event type
}
编辑:正如@Cybernate所述,这是将DOM元素设置为this
。您需要将其包含在getProducts
函数$(this)
中,或者在内联处理程序中将其设置为。
虽然将this
设置为元素本身更符合典型的事件处理程序行为。
编辑:为了进一步说明.call
的作用,它允许您手动在您所使用的功能中设置this
的值呼叫。
使用此功能,只需提醒this
:
function some_func() {
alert( this );
}
以基本方式(在浏览器中)调用它使this
引用DOM窗口。
some_func(); // the alert will be DOM Window
但现在允许使用.call
调用,并将第一个参数设置为123
。
some_func.call( 123 ); // the alert will be 123
您现在可以看到警报显示123
。该函数未更改,但this
的值已更改,因为我们已使用.call
手动设置它。
如果您要发送其他参数,只需将它们放在 thisArg 之后。
function some_func( arg1 ) {
alert( this );
alert( arg1 );
}
some_func.call( 123, 456 );
this
提醒将为123
,您发送的下一个参数将设置为arg1
参数,因此arg1
将为456
。
因此,您可以看到call
基本上切掉了您发送的第一个参数,将其设置为this
的值,并将其余参数设置为与函数参数关联的正常参数。 / p>
答案 1 :(得分:2)
您可以尝试:
onchange="function(){var $this = $(this); getProducts('standard_product', $this)}"
为了更好地摆脱内联事件处理程序分配,如下所示:
$(function(){
$(".category").click(function(){
var $this = $(this);
getProducts('standard_product', $this);
});
})