javascript - 将元素从一个监听器传递到嵌套监听器

标签 javascript jquery events jquery-events

当单击按钮时,监听器会触发并打开一个模式,我需要从单击的按钮获取信息,以便将其传递到监听器中,这些监听器会在模式内发生某些情况时触发。

我的 JavaScript:

$('li.tab').on('click', 'span.edit-tab', function() {
    var elem = $(this);
    var tabName = elem.parent().text();
    tabName = tabName.replace(/\s*$/g, '');
    $('#tab-name').val(tabName);
    $('#tab-name').on('keypress', function(elem) {
        var appendedSpan = '';
        appendedSpan += '  <span class="edit-tab glyphicon glyphicon-pencil" ';
        appendedSpan += 'data-toggle="modal" data-target="#edit-tab-modal"></span>';
        var newName = $(this).val() + appendedSpan;
        el.parent().html(newName);
    });
});

我试图传入触发模态的元素,将其传递到输入的监听器中,但无论我尝试传入什么,变量 elem 都是 jQuery 对象适用于#tab-name,不适用于span.edit-tab。有什么想法吗?

最佳答案

我认为您唯一需要的就是在 keypress 上下文之外保存 eventData$popupTriggerElem:

$('.popupTrigger').on('click', function(popupEventData) {
    var $popupTriggerElem = $(this);
    $('#tab-name').on('keypress', function(tabEventData) {
        var $tabElem = $(this);
        //now you can use all 4 variables:
        console.log(popupEventData);
        console.log($popupTriggerElem);
        console.log(tabEventData);
        console.log($tabElem);
    });
});

这样您就可以访问: - 触发点击事件的元素, - 点击事件数据 - 触发按键事件的元素 - 按键事件数据

JS 的厉害之处在于,您当前所在的任何函数/对象的每个父上下文都会保留,直到该函数/对象从内存中删除为止。

编辑:

正如您在@Wynand 评论中看到的,此行为基于闭包。更多内容请参见MDN docs

关于javascript - 将元素从一个监听器传递到嵌套监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21223748/

相关文章:

events - JNA 事件日志阅读器

javascript - 如何确保 slider 文本位于图像下方

javascript - Tempus Dominus 日期时间选择器 如何设置值?

javascript - 在 Jquery 中评估

jquery - 如何在 Windows 上的 Firefox 中阻止 Flash 内容通过 jQuery UI 对话框闪耀

javascript - 如何向jsf标签graphicImage添加多个事件

javascript - 在 Highcharts 饼图中旋转数据标签

javascript - <pre> 标签内的 Html 代码,innerHTML 不返回所有代码

javascript - 单击时如何输出我的单选按钮的值

c# - 在 WPF Threestate Checkbox 中捕获不确定状态