【问题标题】:jQuery: How can I capture event from one element and assign it to a different element?jQuery:如何从一个元素捕获事件并将其分配给不同的元素?
【发布时间】:2016-03-15 01:44:37
【问题描述】:

我有以下 HTML

<a class="link" href="#">Link</a>

<button class="btn">
    BUTTON
</button>

<p class="hidden">This is a paragraph</p>

和 jQuery

$(document).ready(function(){
    $('.link').on('click', function(){
        displayText();
    }); 

    function displayText(){
        $('p').show();
    }
});

点击链接时会显示&lt;p&gt; 标签。我想捕获链接事件并将其分配给按钮。有什么建议吗?

更新: 我正在寻找的是捕获链接上的事件并停止它,显示一个对话框并将事件分配给对话框上的一个按钮。

JSFiddle:https://jsfiddle.net/0ct4r7y0/

【问题讨论】:

  • 使用$('.btn') 而不是$('.link')。或者如果你想要两者,$('.btn, .link')
  • 按钮应该做什么?我的意思是...为什么不像$(".btn").trigger("click") 那样做呢?目前还不清楚你在追求什么......似乎是一个 XY 问题 问题
  • 不清楚您要达到的目标。将事件分配给 DOM 元素是一件很奇怪的事情。
  • 功能需求看似简单,做题难。
  • 建议你阅读this

标签: javascript jquery


【解决方案1】:

每当像这样点击链接时,您可以使用来自a.link 的事件触发 点击 button

$('.link').on('click', function(event){
    displayText();
    console.log(event);
    $('button').trigger('click', event);
});

// to test that the event is passing properly
$('button').on('click', function(event, originalEvent){
    console.log(event, originalEvent);

    //originalEvent.target === <a class="link"></a>
    //event.target === <button></button>
});

请注意,按钮点击处理程序中的 originalEvent 是从a.link 的点击传递的事件。

【讨论】:

  • 谢谢,但可以存储该事件并在以后使用它吗?我正在寻找的是捕获事件,显示一个对话框并将事件分配给对话框上的一个按钮。
  • 是的,为什么不呢,您也可以使用curry pattern进行按钮回调以存储原始事件
  • 不确定这将如何适用于我的问题。
  • @ultimatecoder, questions questions ... Javascript 或 jQuery 事件对象具有各种属性。那么事件的哪些属性计划在以后使用时使用?当按钮被点击时,存储的事件会给你什么是按钮生成的事件所不具备的?
  • @Roamer-1888 我正在寻找连续性。当表单发生更改并且用户尝试离开时,我会显示一个对话框。在对话框上单击“确定”时,我想将其关闭并将用户带到他之前尝试单击的页面。所以,我认为点击事件需要存储并分配给对话框上的“确定”按钮。除非有更好的方法来处理。
【解决方案2】:

也许你可以将那个事件(函数)重新绑定为另一个 dom,同时在你想要捕获的 dom 上找到监听器,希望Visual Event 可以帮助你

【讨论】:

    猜你喜欢
    • 2018-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多