何时将事件作为参数传递给函数(Javascript)?

时间:2017-07-18 16:21:41

标签: javascript jquery events

我是Javascript事件的新手我遇到过许多例子,其中event作为参数传递给函数。因此,必须将event传递给每个函数,何时不传递它。如下面的代码事件在第二个函数中传递。我很困惑什么时候通过,什么时候不通过?

var elem = document.getElementById('my-elem');
elem.addEventListener('click', function(){
  //the element has been clicked... do stuff here
}, false);


$('#my-elem').click(function(e) {
  //the element has been clicked... do stuff here
});

5 个答案:

答案 0 :(得分:0)

如果你的问题是哪个错误处理程序获得了一个事件对象,那么答案就是全部。

您通过addEventListener或其他库(例如示例jQuery)添加的所有函数都会将event对象作为第一个参数。

但是,JavaScript允许您将更多参数传递给函数,而不是实际需要。因此,提供不接受事件参数的函数是没有错误的,因为该函数仍然可以被浏览器等以同样的方式调用。

答案 1 :(得分:0)

没有, 你不必在函数上传递事件。

你必须得到这个元素,并在调用你想要应用于该元素的函数之后。

按钮上应用的功能有一个小例子。

$("#button1").on('click',function(){
  alert("clicked");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<button id="button1">
click me
</button>

答案 2 :(得分:0)

$('#my-elem').click(function(e) {
  //the element has been clicked... do stuff here
});

在这种情况下你没有传递e(事件),你在函数中接收它。当单击#my-elem时,浏览器将调用此函数,并将event作为第一个参数。您的函数接收此元素为e。在那里你可以看到像

这样的东西
e.target

等等。

答案 3 :(得分:0)

传递 事件,由浏览器自动完成所有标准事件触发器。问题是你需要 接收 事件作为所有函数中的命名参数,答案就是,这完全取决于你是否想要使用它:

当您需要访问该活动时:

class CreateTable(QTableWidget):
      def __init__(self):
         self.tableWidget = QTableWidget()
         self.tableWidget.setRowCount(4)
         self.tableWidget.setColumnCount(2)
         self.tableWidget.setItem(0,0, QTableWidgetItem("Cell (1,1)"))
         self.tableWidget.setItem(0,1, QTableWidgetItem("Cell (1,2)"))
         self.tableWidget.setItem(1,0, QTableWidgetItem("Cell (2,1)"))
         self.tableWidget.setItem(1,1, QTableWidgetItem("Cell (2,2)"))
         self.tableWidget.setItem(2,0, QTableWidgetItem("Cell (3,1)"))
         self.tableWidget.setItem(2,1, QTableWidgetItem("Cell (3,2)"))
         self.tableWidget.setItem(3,0, QTableWidgetItem("Cell (4,1)"))
         self.tableWidget.setItem(3,1, QTableWidgetItem("Cell (4,2)"))

当您不需要访问该活动时:

element.addEventListener("click", foo);

// You can explicitly declare a function argument that will represent
// the event object that is automatically passed to you by the browser
function foo(evt){
  // And, then you can access the event in the function
  evt.xyz...
}

同样,事件将在所有情况下传递,因此如果您决定使用参数捕获引用,则不会改善或降低性能。作为开始的一般经验法则,养成为其添加命名参数的习惯可能是一个好主意,因此如果您需要访问它,您可以轻松地获取它。

答案 4 :(得分:0)

如果你需要使用它(比如在它上面调用stopPropagation()),那么在你的函数中命名它。正如idmean所说,无论你是否在函数定义中命名它,它都会被传递。因为你只是在声明一个回调,所以不是你正在做&#34;传递&#34;。你正在传递一个函数。调用该函数时,将使用event参数调用它。如果你说出来的话:

function (e) {}

然后您可以使用

访问它
e.stopPropagation()

如果没有,则必须使用arguments对象访问它。