4

有没有办法传递$(this)给jQuery中的另一个函数?

这就是我所拥有的,但它不起作用:

$(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 的新手!

4

5 回答 5

16

可以正常工作,尽管需要注意的是,如果您传递 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);      
}
于 2012-09-21T15:31:27.950 回答
2

你快到了 - 摆脱你元素变量周围的 $() :

function recalculate_subtotal(element) {
    element.closest('.fields').find('#Subtotal').val(price * quantity);      
}
于 2012-09-21T15:31:45.957 回答
1

因为您已经将 jQuery 对象选择器传递给您的函数,所以您不需要在元素周围使用 $() .. 这应该可以

function recalculate_subtotal(element) {
    element.closest('.fields').find('#Subtotal').val(price * quantity);      
} 
于 2012-09-21T15:35:12.110 回答
1

尝试这个,

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

$('#AnyElement').recalculate_subtotal(){
});    
于 2012-09-21T15:32:09.343 回答
1

由于您已经通过 $(this) 您只需要更改此:

function recalculate_subtotal(element) {
    element.closest('.fields').find('#Subtotal').val(price * quantity);      
}
于 2012-09-21T15:32:14.100 回答