【问题标题】:Why does jQuery event handler is not changing the value?为什么jQuery事件处理程序没有改变值?
【发布时间】:2018-04-30 07:19:30
【问题描述】:

我已使用事件处理程序更改消息,但单击链接后消息未更改。

<a href="javascript:void(0);">Test 1</a>
<a href="javascript:void(0);">Test 2</a>

这里是 Javascript 文件:

$("a").bind("click", { message : msg }, function(event) {
    msg = "Changed msg";
    alert(event.data.message);
  });

【问题讨论】:

  • ...因为这不是它的工作原理...您不能随意设置变量的值并期望它改变对象的属性。好吧,我想你可以预料到,但你错了。
  • api.jquery.com/bind 阅读关于 eventData 的部分,它不是你想的那样
  • 哦。我认为它像普通变量一样工作。我们不能通过分配任意值来改变它。

标签: javascript jquery event-listener jquery-events


【解决方案1】:

如果你想改变锚标签的文字,你可以这样做like this

$("a").bind("click", function(event) {
  $(event.target).text('Changed msg');
});

这可以简写为this 事件处理程序内部将引用event.target 或您将函数绑定到的内容(锚标记)。所以你可以像这样写上面的:

$("a").bind("click", function() {
  $(this).text('Changed msg');
});

您不能简单地设置值来改变文档对象模型 (DOM)。你需要使用texthtml 之类的方法来告诉jQuery 你想要做什么。您可以使用vanilla JavaScript 进行操作。

如 cmets 中所述,eventData 是一个可以包含的对象,用于将 long 传递给事件处理程序。但它不能变异或改变事物。

【讨论】:

  • 或者直接使用$(this)
  • @Cymen 我的代码有什么问题?为什么我不能通过这样分配来改变值?你能告诉我吗?
  • @TazbirulHaque 因为你在绑定函数中随机添加参数
  • @Huangism 是的,但我想现在最好让它更明显。但我更新为包含它。
  • @TazbirulHaque 您需要阅读 eventData 实际上做了什么api.jquery.com/bind 如果您只想在点击时更改锚的内容,那么这个答案会给您您想要的。您的 eventData 原始代码使用方式不正确,eventData 的目的不是您想要使用它的目的,再次阅读有关它的部分并理解它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-23
  • 2018-06-24
  • 1970-01-01
相关资源
最近更新 更多