在当前元素的onchange上发送$(this)

时间:2011-06-13 19:39:45

标签: javascript jquery html

我有这个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));">

我希望与当前的选择

相关联

2 个答案:

答案 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);
 });
})