如何在jQuery中将$(this)作为参数传递给另一个函数?

4
有没有一种方法可以在jQuery中将$(this)传递给另一个函数?
这是我目前拥有的,但它不起作用:
$(function() {

  $('[id$=price]').change(function() {
    var price = $(this).val();
    var quantity = $(this).closest('.fields').find('[id$=quantity]').val();     
    recalculate_subtotal($(this));
  });

  $('[id$=quantity]').change(function() {
    var quantity = $(this).val();
    var price = $(this).closest('.fields').find('[id$=price]').val();           
    recalculate_subtotal($(this));      
  });

  function recalculate_subtotal(element) {
    $(element).closest('.fields').find('#Subtotal').val(price * quantity);      
  }

});

我想要将$(this)传入最后一个函数中。

谢谢任何帮助和抱歉,我是jquery的新手!


1
这看起来并没有错... 不过在 element 周围可能不需要 $()。你收到了错误吗? - BLSully
5个回答

17

那样做是可以的,但需要注意的一点是,如果你正在传递 jQuery 对象 ($(this)),则不需要再次将其包装在 $() 中:

$('[id$=price]').change(function() {
    var price = $(this).val();
    var quantity = $(this).closest('.fields').find('[id$=quantity]').val();     
    recalculate_subtotal($(this));
})


function recalculate_subtotal($element) {
    $element.closest('.fields').find('#Subtotal').val(price * quantity);      
}

3
我也倾向于用 $ 作为 jQuery 集合变量的命名前缀,例如 $element。我认为这有助于代码的清晰度。 - Explosion Pills
是的 - 这是一个很好的命名约定。 - Gabriel Florit
@ExplosionPills - 我完全同意。我所有的jQuery变量都以$为前缀。 - Jamiec
@Tintin81 - 看看这个答案的评论,注意一下。在表示jQuery对象的变量前加上“$”非常有帮助,这样你就知道何时需要用$()包装,何时不需要。我会更新我的答案来演示这一点。 - Jamiec

2
你已经接近成功了 - 去掉你元素变量周围的$():
function recalculate_subtotal(element) {
    element.closest('.fields').find('#Subtotal').val(price * quantity);      
}

2

请尝试以下方法:

$.fn.recalculate_subtotal = function () {
    element = $(this);   // you will get $(this) here
    $(element).closest('.fields').find('#Subtotal').val(price * quantity);      
}

$('#AnyElement').recalculate_subtotal(){
});    

1

既然您已经传递了$(this),您只需要更改这个:

function recalculate_subtotal(element) {
    element.closest('.fields').find('#Subtotal').val(price * quantity);      
}

1
因为您已经将jQuery对象选择器传递给函数,所以不需要在元素周围使用$()。应该这样做:
function recalculate_subtotal(element) {
    element.closest('.fields').find('#Subtotal').val(price * quantity);      
} 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接