如何找到函数调用的原因

时间:2018-02-06 08:39:03

标签: javascript jquery

这似乎是一些有线问题,但我需要区分这两个。

我有一个功能

function calculatePerDayRentCost(){
//body
}

并通过两种方式调用此函数

首先(以编程方式表示)

$('#qtyExtraDriver').change();

秒(关于下拉值的变化)

<select onchange="calculatePerDayRentCost()">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>

有没有办法区分函数调用函数的原因,即以编程方式或下拉列表更改。

1 个答案:

答案 0 :(得分:3)

您无法区分由用户或代码触发的内联事件处理程序,但如果您在代码中分配处理程序,则可以...

&#13;
&#13;
function calculatePerDayRentCost(e) {
  if (e && e.originalEvent) {
    console.log("fired from select");
  }
  else {
    console.log("fired from code");
  }
}

$(function() {

  // assign the change event handler
  $("#qtyExtraDriver").on("change", function(e) {
    calculatePerDayRentCost(e);
  });

  // trigger the change event through code
  $('#qtyExtraDriver').change();

});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<select id="qtyExtraDriver">
  <option value="1">1</option>
  <option value="2">2</option>
  <option value="3">3</option>
</select>
&#13;
&#13;
&#13;

这使用event.originalEvent属性,它是一个jQuery属性,是触发处理程序的原始事件。在实际使用select的情况下,触发jQuery更改事件的是change事件,但是当您通过代码触发.change()时,没有事件,因此它是undefined

请注意:这仅适用于您使用jQuery触发事件,这意味着我们也可以使用它来处理事件。如果你没有使用jQuery,那么这个答案对你没有用。请记住这一点,如果您决定在任何时候停止使用jQuery。