【问题标题】:jQuery - how to save page elements as variables if html is being reprinted asynchronouslyjQuery - 如果异步重印html,如何将页面元素保存为变量
【发布时间】:2016-05-29 14:01:01
【问题描述】:

我有一个单页应用程序,用 javascript 和 jQuery 编码。页面内容正在根据用户的交互进行重新打印。问题是,我将页面元素声明为全局变量,但它们不起作用(它们的值未定义),因为 html 被清空并再次填充。

如果不是全局的,我应该在哪里声明页面元素?

这是我的代码的当前模式:

$(document).ready(function () {
    //GLOBAL VARIABLES
    var $homeLink = $(".home");
    var $userLink = $(".user");  
    var $content = $(".content");
    var $text = $(".content .text"); //this is undefined as the html doesn't exist yet

    //FUNCTIONS
    function printHtml() {  
        $content.empty();
        $('<div />', { class: "text", text: "Lorem" }).appendTo($content);
    }

    //EVENTS
    $homeLink.on("click", function(){
        printHtml();
    });

    $text.on("click", function() { //can't get here because variable $text is undefined
        //do something
    });
});

【问题讨论】:

  • 我猜你可以把你的JS的
  • @joel JS 文件位于 html 页面的末尾。页面 html 正在通过来自 Ajax 调用的数据重新打印。

标签: javascript jquery global-variables closures single-page-application


【解决方案1】:

委托呢?

只需更换你的

$text.on("click", function() { //can't get here because variable $text is undefined
        //do something
    });

与

$content.on('click', '.text', function() {

});

在$text 中不需要(或者如果你需要,你总是可以在处理程序中使用 jQuery 来获取它(因此它可以更改,你应该在每次点击时重新找到它)

【讨论】:

  • 是的,它适用于这个简单的例子。但是对于单页应用程序,我不仅需要将事件侦听器附加到页面元素,还需要将它们作为参数传递。有没有办法在拥有动态 html 内容的同时将页面元素保存到变量中?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-17
  • 1970-01-01
  • 2016-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多