尝试使用event.data打印输出未定义

时间:2016-12-21 01:24:08

标签: javascript jquery

我试图让我的sayHello函数打印出“Test”但是它打印出来是未定义的。我有一个对象,其中一个名为firstName的字段设置为“Test”。我错过了什么,所以我的sayHello函数警告“Test”而不是event.data.firstName的Undefined。这是我的代码

$('button.focus').click(function() {
  $('div').data("greeting","Hello world");

  alert($('div').data("greeting"));

  {
    firstName: 'Test'
  }

}, sayHello);

function sayHello(event)
{
  alert(event.data.firstName)
}

2 个答案:

答案 0 :(得分:2)

根据event.data的文档

绑定当前执行处理程序时传递给事件方法的可选数据对象。

在您的示例中,您尝试绑定到一个匿名函数和一个名为。

的函数

.click()不支持。您需要传递如下所示的事件数据



$('button.focus').click({firstName: 'Test'},sayHello );
function sayHello(event)
{
  $('div').data("greeting","Hello world");
   alert($('div').data("greeting"));
   alert(event.data.firstName);
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class="focus">focus</button>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

问题中的

javascript不会将对象传递给事件处理程序。该对象位于事件处理程序中的块内。

您可以在事件处理程序之外定义对象。使用.on(),将对象作为第二个参数传递给.on()。在sayHello作为参数的事件处理程序中调用event

&#13;
&#13;
var data = {
  firstName: 'Test'
};

$('button.focus').on("click", data, function(event) {
  $('div').data("greeting", "Hello world");

  alert($('div').data("greeting"));

  sayHello(event)

});

function sayHello(event) {
  alert(event.data.firstName)
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class="focus">click</button>
&#13;
&#13;
&#13;