javascript - 如何更改事件处理程序中传递的变量

标签 javascript jquery reference event-handling jquery-events

我想知道是否有办法通过处理事件来改变“外部”变量

function generateHTML()
{
    var html = '';

    // Some html generating code
    html += '<b>John Doe</b>';

    $(document).trigger('html:generating', html);

    // Do more hardcoded stuff with html

    $(document).trigger('html:generated', html);

    return html;
}

$(document).on('html:generating', function(e, html) {
    html = '<span>' + html + '</span>';
});

$(document).on('html:generated', function(e, html) {
    console.log(html);  // prints <b>John Doe</b>
                        // expected <span><b>John Doe</b></span>
});

generateHTML();

这在处理 Mustache(或任何其他模板库)动态 html 代码时非常有用。

最佳答案

如果您正在谈论通过引用传递 html,有一种方法可以做到。作为函数参数传递的所有内容都是按值传递的,但是如果传递一个对象,对象属性仍然指向原始值,因为指针被复制了。所以,你可以这样做:

function generateHTML()
{
    var container={html: ''};

    // Some html generating code
    container.html += '<b>John Doe</b>';

    $(document).trigger('html:generating', container);

    // Do more hardcoded stuff with html

    $(document).trigger('html:generated', container);

    return container.html;
}

$(document).on('html:generating', function(e, container) {
    container.html = '<span>' + container.html + '</span>';
});

$(document).on('html:generated', function(e, container) {
    console.log(container.html);
});

generateHTML();

关于javascript - 如何更改事件处理程序中传递的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44211487/

相关文章:

javascript - 如何从 javascript Date 对象获取时区字符串?

javascript - 在 jqgrid 的寻呼机中重新定位 pagenumber 字段

javascript - 选择在移动设备上提取错误信息的按钮

rust - 为什么不能在同一结构中存储值和对该值的引用?

c++ - 将 vector 元素的引用传递给线程函数

javascript - AudioBufferSourceNode 连接后才开始播放

javascript - Ajax 表单提交没有结果

javascript - XMLHttpRequest无法加载XXX No'Access-Control-Allow-Origin' header

JavaScript : unable to read file content using XMLHttpRequest

.net - 从旧引用更改方法