【问题标题】:Trigger a jQuery Event Handler Assigned in a Different Code Block触发在不同代码块中分配的 jQuery 事件处理程序
【发布时间】:2023-03-25 01:38:01
【问题描述】:

我有一种情况,点击处理程序是在一个 jQuery 代码块(文件)中定义/分配的,我想从另一个在不同的 jQuery 代码块中定义/分配的点击事件触发它。我怎样才能做到这一点?

下面的代码是我想要完成的一个大大简化的版本。当我单击#Element2 时,我希望看到的行为是 JavaScript 警报“元素一”。

示例 HTML:

<p id="Element1">Element One</p>
<p id="Element2">Element Two</p>

第一个 jQuery 代码块:

$(document).ready(function() {
    $('#Element1').click(function() {
        alert('Element One');
    });
});

第二个 jQuery 代码块:

$(document).ready(function() {
    $('#Element2').click(function() {
        $('#Element1').click();
    });
});

更新:我原来的例子确实有效。我建立在我的字段提示jQuery UI Dialog solution 的基础上,并没有考虑到我正在使用的'clickoutside' handler。在我的“clickoutside”处理程序中添加对第二个元素的检查允许显示对话框。

【问题讨论】:

    标签: javascript jquery jquery-ui jquery-events jquery-ui-dialog


    【解决方案1】:

    您需要在点击第一个元素时触发一次点击。您可以为此使用trigger 方法。

    function element1Hanlder () {
        alert('Element One');
    }
    
    $(document).ready(function() {
        $('#Element1').click(function() {
            alert('Element One');
        });
    });
    
    $(document).ready(function() {
        $('#Element2').click(function() {
            $('#Element1').trigger('click');
        });
    });
    

    【讨论】:

    • #Elment2 被点击时,您第二次将处理程序分配给#Element1,这不是我想要完成的。我想触发已经分配的处理程序。
    • @Sonny 我反其道而行之。你需要的是trigger。更新
    • 它仍然不适合我。我认为这是一个范围问题,因为处理程序是在第一个匿名 $(document).ready(function() {...}); 调用中定义的,并且在第二个匿名调用中不可见。
    • @sonny 范围在这里应该无关紧要。您只是触发了对元素的点击。你有任何其他事件处理程序吗?这是一个例子:jsfiddle.net/6VHeP
    • 原来有一个不同的问题。甚至我的示例代码也能按原样工作。
    【解决方案2】:

    编辑:这是基于 JohnP 的“触发”建议(因此您应该选择他作为正确答案)...

    如果我从外部 js 文件加载这个块...

    $(document).ready(function() {
    
        $('#Element1').click(function () {
            alert( $(this).text() );
        });
    
    });
    

    然后将其加载到 HTML 本身的脚本标记中...

    $(document).ready(function() {
    
        $('#Element2').click(function () {
            $('#Element1').trigger('click');
        });
    
    });
    

    似乎按预期工作。

    【讨论】:

    • 我认为我的回复过于简单,JohnP 的“触发”建议是更准确的解决方案。
    • 这需要是两个独立的$(document).ready(function() {}); 代码块。
    • @Sonny 请查看我的编辑。对此进行了测试,似乎可以正常工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多