【问题标题】:How to include script tags on JQuery HTML如何在 JQuery HTML 中包含脚本标签
【发布时间】:2013-02-08 13:24:31
【问题描述】:

我这里有这段代码,可以对我的 web 应用程序进行 ajaxizes。

$.get(State.url, function(data) {
            console.log($(data).find('#main-content').text());
            $('#main-content').html($(data).find('#main-content').html());
        },"html");

在某些时候,用户应该上传一个文件,但由于它是 ajaxified,它只会加载传入响应的父容器,即 this。

         <form enctype="multipart/form-data" class="contact_form" action="doUploadAudio">
        <input type="file" name="file" value="" id="file"/>
        <script>
            console.log("HEHE");
                $('#fileupload').fileupload({
                    replaceFileInput:false,
                    done: function (e, data) {
                        alert("DONE");
                        $('#main-content').html('');
                        $('#main-content').html($(data.result).find('#main-content').html());
                    }
                });

             </script>  
              <button class="btn" id="uploadAudio" type="submit" class="submit" data-loading-text="Uploading...">Upload</button>
          </form>

如你所见,我的表单没有执行它的脚本标签,有什么办法可以执行吗?

请注意,我目前使用的是 jQuery 1.8.3

【问题讨论】:

  • 脚本标签中的代码没有执行?尝试将文件上传包装在$(document).ready(function() { $('#fileupload')... });
  • 试过了还是不行。

标签: javascript jquery ajax file dom


【解决方案1】:

首先,我在您的 HTML 中没有看到任何 ID 为 fileupload 的元素?

无论如何,您应该避免加载包含&lt;script&gt; 标签的 HTML,因为加载的 JavaScript 的行为是不可预测的。

首先,您应该将您的 HTML 分开并单独加载:

<form enctype="multipart/form-data" class="contact_form" action="doUploadAudio">
    <input type="file" name="file" value="" id="file"/>
    <button class="btn" id="uploadAudio" type="submit" class="submit" data-loading-text="Uploading...">Upload</button>
</form>

然后你可以在$.get的成功回调中执行JavaScript:

$.get(State.url, function(data) {
            console.log($(data).find('#main-content').text());
            $('#main-content').html($(data).find('#main-content').html());
            $('#fileupload').fileupload({
                replaceFileInput:false,
                done: function (e, data) {
                        alert("DONE");
                        $('#main-content').html('');
                        $('#main-content').html($(data.result).find('#main-content').html());
                    }
            });
 },"html");

或者把JavaScript的sn-p(不带&lt;script&gt;标签)放在服务器上的一个JS文件中(比如fileupload.js),然后这样调用:

$.get(State.url, function(data) {
            console.log($(data).find('#main-content').text());
            $('#main-content').html($(data).find('#main-content').html());
            $.getScript("<url to fileupload.js>", function() {
                        console.log("Fileupload should now be working");
            });
},"html");

【讨论】:

  • 但问题是 $.get 适用于我的所有页面。有没有其他选择?还是专门用于 filupload?
  • 请注意,$("#fileupload").fileupload... 语句仅适用于 ID 为 fileupload 的元素存在于您的 DOM 中。如果您愿意,也可以在调用 fileupload 之前进行检查:if ($("#fileupload").length &gt; 0){ ...
  • 让我们在初始页面上说它没有 ID 为 #fileupload 的表单,当我单击链接时,它将通过 ajax 加载表单。即使表单是通过 ajax 加载的,$('#fileupload') 会执行吗?
  • 如果a)通过ajax加载的表单包含一个id为fileupload的元素并且b)fileuploadJS代码被插入到$.get的回调函数中after i> 你的.html 命令,那么它应该可以工作。
  • 看来我必须延长我的 $.get 代码。会浪费吗?因为该方法适用于我的应用程序中的所有页面?我认为 JQuery 会自动检测到它,就像我猜想的 jquery 魔术一样。但我想我错了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 2016-01-26
  • 2019-08-12
  • 2021-05-25
  • 2023-02-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多