$(“script”)。append(有没有人成功使用过这个?

时间:2017-01-22 07:35:38

标签: jquery function append

我正在尝试使用$("script").append(函数创建一个jQuery(甚至是Javascript)函数,但是一旦它被创建,“page”或“doc”已经加载了,所以不会“看见。 (当函数加载到页面时它不存在“它不存在”,即使它是创建和可查看的)。有没有办法重新加载jQuery的<script>或“re-document.ready”,以便页面知道它现在存在。

我知道这是document.ready加载过程,因为如果我对函数进行硬编码就可以正常工作(因为它在页面加载之前存在)。有人知道如何做到这一点或如何解决它。你如何使用$("script").append(

这是我正在尝试做的一个例子。

function makeFunction(array){
$("script").append("$(document).ready(function({$('#"+array+"').on('click', function(){$('#"+array+"').hide();});});");
}

在另一个循环运行的函数中调用此函数。循环函数在<script>标记之后直接调用。这样(据我的理解)它加载document.ready。问题是,新创建的函数永远不会被初始document.ready加载“准备好”(因为它们还没有存在)。

所以我问是否有办法解决这个问题,所以我可以用一个单一的函数为我编写很多函数。

如果我遗漏了任何重要信息,请具体说明需要什么“背景”。

2 个答案:

答案 0 :(得分:0)

没有人 [citation needed] 成功使用$("script").append(),因为即使按照您认为的那样工作,也没有必要这样做。

Javascript中的

Functions are first class citizens。要在运行时创建新函数,您无需修改​​页面的源代码。

然后,jQuery的ready处理程序在文档准备就绪时运行传递的函数,如果在注册另一个函数时文档已经准备好,function will be called straight away

因此,您的不必要的复杂和非工作代码应替换为:

function makeFunction(array) {
    $(function() {
        $("#"+array).on("click", function(){ $(this).hide(); });
    });
}

$(this)改进不是回答您的问题所必需的,即使没有必要,您也可以继续使用$("#"+array)

答案 1 :(得分:0)

我发现使用php是一种更好的方法。限制自己只是javascript是愚蠢的,但我当时并不知道。为了回答我自己的问题,最好在php文档中循环创建函数,这样当页面被“制作”时,所有元素都是在手工创建之后创建的。