JQuery追加javascript

4

我尝试创建模块化应用程序,因此每个页面都包含自己的HTML和JavaScript代码。 我打算像这样动态加载所有代码:

var s = document.createElement("script");
s.type = "text/javascript";
s.src='function oncl() { alert("click");}';
$(".selector").append(s);

$( ".selector" ).
append('<input type="button" onclick="ocl();" />
<form action="../test/test_upload4.php"  
method="POST" enctype="multipart/form-data"  name="getnamefile">
<input type="file" id="uploadfile" name="uploadfile">
<input type="submit" id="Submit" name= "Submit" value="Upload"></form>');

但是它不起作用 - 错误: ocl未定义。可能的原因是什么?如果我理解正确,每个网页都有一个包含所有JavaScript函数的对象 - 那么为什么不能添加或删除函数?


你为什么需要这种hack技巧?你正在使用jQuery和HTML中的onclick吗? - Uku Loskit
这是一个可怕的想法。你为什么要这样做? - SLaks
我正在开发的Web应用程序很复杂,类似于CRM。它包含近100个页面。因此,我需要将其分成独立的页面以便并行工作。如果每个模块都有自己的JavaScript和HTML,那么似乎会更方便。 - user810430
您可以使用jQuery的click或bind方法在将标记附加后设置事件处理程序。 - ShankarSangoli
4个回答

2
如果你想要动态加载js文件,可以尝试以下方法:
以下是HTML页面代码:
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

    <html>
    <head>
    <script type="text/javascript">
        function dynamicLoad() {
            var s = document.createElement("script");
            s.type="text/javascript";
            s.language="javascript";
            // Here goes your 
            s.src ="dynamic.js";
            document.getElementsByTagName("head")[0].appendChild(s);
            s.onreadystatechange = function() {
                //window.alert(s.readyState);
            }
            s.onload= function() {
                if (s.readyState == "complete") {
 // You must create your DOM element after the js file has been loaded
                    var btn = document.createElement("input");
                    btn.type="button";
                    btn.value="Click Me";
                    btn.onclick = test;
                    document.getElementsByTagName("body")[0].appendChild(btn);
                }
            }
        }
    </script>
    </head>
    <body onload="dynamicLoad()">
        <!-- a href="javascript:void(0)" onclick="test()">Click Me</a -->
    </body>
    </html>

这里是JS文件:

function test() {
    window.alert("HELLO");
}

我在IE 9下测试了这段代码,仅供参考。


2
< p > <script> 标签的 src 属性指定了外部 Javascript 文件的 URL,而不是脚本的文本内容。

如果您想要在任意字符串中执行代码,可以调用 eval 函数。
然而,请不要这样做。


1
在你的代码中,你声明了一个名为oncl的函数,并尝试调用ocl(缺少了一个n)。
敬礼,
马克斯

请查看SLaks的答案(并考虑其他贡献者的评论,也许你可以找到另一种方法来实现你想要的)。 - JMax

1

除了上面的回答之外,您还没有定义任何“ocl”函数,只有“oncl”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接