2016-12-29 15 views
0

Мой JQuery является:Функция присваивания указателя не работает

$("#qf").change = calc; 
$("#sellers_price").change = calc; 

function calc() 
{ 
    var data=""; 
    $qnty = $("#calQnty"); 
    $unit = $("#calUnit"); 
    $price = $("#calPrice"); 

    var value = this.value; 
    if(($("#price_based_on").val()=="Kilos")&&($("#unit").val()=="kg")) 
    { 
     if(this.value<1) 
     { 
      $qnty.val((this.value*1000).toFixed(2)); 
      $unit.val("gm"); 
      $price.val(($("#sellers_price").val()*value).toFixed(2)); 
     } 
     else if(this.value>=1) 
     { 
      $qnty.val((this.value*1).toFixed(2)); 
      $unit.val($("#unit").val()); 
      $price.val(($("#sellers_price").val()*value).toFixed(2)); 
     } 
    } 
    else if(($("#price_based_on").val()=="Kilos")&&($("#unit").val()=="gm")) 
    { 
     var calQnty = this.value*$(this).parents("tr").find('.qnty').text(); 
     if(calQnty>=1000) 
     { 
      $qnty.val((calQnty/1000).toFixed(2)); 
      $unit.val("kg"); 
      $price.val(($("#sellers_price").val()*value).toFixed(2)); 
     } 
     else 
     { 
      $qnty.val(calQnty.toFixed(2)); 
      $unit.val($("#unit").val()); 
      $price.val(($("#sellers_price").val()*value).toFixed(2)); 
     } 
    } 
    else 
    { 
     $qnty.val((this.value*1).toFixed(2)); 
     $unit.val($("#price_based_on").val()); 
     $price.val((json.price*value).toFixed(2)); 
    } 
} 

Теперь, благодаря линиям $("#qf").change = calc; и $("#sellers_price").change = calc;, когда значение либо qf или sellers_price изменений, функция calc() следует назвать, не так ли? Но когда я пытаюсь это сделать, это не работает. Что я ошибаюсь?

Я гарантирую, что код работает, когда я пишу его как $("#qf").change(calc);, но не тогда, когда он написан другим способом, как показано в коде. Почему это происходит?

+1

* "следует называть, правильно? *" - конечно нет. Установка свойства 'change' экземпляра jQuery не имеет ничего общего с событием' onchange'. – dfsq

+0

Свойство '.change' не является ссылкой на функцию обработчика событий, как в бывшем DOM с' my_elem.onchange = calc'. Вместо этого это метод, с помощью которого вы передаете функцию, которая будет действовать как обработчик события. Соответствующим кодом в исходном DOM будет 'my_elem.addEventListener (" change ", calc)' –

ответ

3

Заявление

$("#qf").change = calc; 

присваивает ссылку на функцию calc() свойству «изменение» объекта JQuery, созданного $("#qf"). Правильный способ настройки обработчика событий - , вызывающий.change() как вы заметили в своем вопросе.

Объект jQuery - это всего лишь объект, и jQuery не настраивает какие-либо причудливые API-интерфейсы getter/setter, которые мог бы работать так, как написано ваш код. Ваш код представляет собой простое назначение свойств JavaScript, которое не оказывает никакого влияния на обработку событий.

+0

Что делает код '$ (" # qf "). Change = calc;' на самом деле? то есть, какой эффект он имеет? –

+1

@SomenathSinha это совершенно нормально назначение функции ссылки. Например, если вы сохранили '$ (" # qf ")' в переменной, выполнили это назначение, а затем вызвали функцию, это вызовет функцию 'calc()'. Опять же, объект jQuery является всего лишь объектом, а присвоение свойств работает для этих объектов, как и для любого другого объекта. – Pointy

Смежные вопросы