这似乎是一些有线问题,但我需要区分这两个。
我有一个功能
function calculatePerDayRentCost(){
//body
}
并通过两种方式调用此函数
首先(以编程方式表示)
$('#qtyExtraDriver').change();
秒(关于下拉值的变化)
<select onchange="calculatePerDayRentCost()">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
有没有办法区分函数调用函数的原因,即以编程方式或下拉列表更改。
答案 0 :(得分:3)
您无法区分由用户或代码触发的内联事件处理程序,但如果您在代码中分配处理程序,则可以...
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;
这使用event.originalEvent
属性,它是一个jQuery属性,是触发处理程序的原始事件。在实际使用select的情况下,触发jQuery更改事件的是change事件,但是当您通过代码触发.change()
时,没有事件,因此它是undefined
。
请注意:这仅适用于您使用jQuery触发事件,这意味着我们也可以使用它来处理事件。如果你没有使用jQuery,那么这个答案对你没有用。请记住这一点,如果您决定在任何时候停止使用jQuery。