我正在建立一个网站,我有一个功能,允许用户拖放特定类型的文件,然后获取有关该文件的更多信息。除了一件事,我的代码工作正常。我有一个警告框(实际上是一个SweetAlert框),其中显示了用户想要查看的信息。我有处理文件的代码,然后生成一个json,最后生成具有三个按钮的html代码,每个按钮都有自己的功能,驻留在我的javascript中。 我的问题是,我希望用户能够点击三种不同类型的按钮来做各种事情,但SweetAlert框在我的网站上充当一个新的html页面,并且有自己的范围。警报框无法将我的javascript函数识别为现有,因此它什么也不做。
要调用此警报,我使用ajax请求。这是调用该函数的成功消息。数据是json格式化的。
success: function(data) {
informUser(printData(data))
},
这是我的javascript打印json格式和按钮。我没有包含一些简化的部分,所以如果我的代码中的内容没有意义,请告诉我。
function printData(data) {
var str = ""
str += '<p>Your file was added!</p>';
str += "<p>You can access it at these locations: </p>";
str += "<button onclick='changeView()'/>View all files</button>";
str += "<button onclick='downloadCurrent()'/>Download the current file</button>";
str += '<p>To upload this, click here: </p>';
str +='<button onclick="addAsNewButton()">Add As New</button>';
return str;
};
这是我的SweetAlert,它在某种程度上充当了自己的javascript文件。
var informUser = function(message){
swal({title: "Congrats on uploading a file!", html: true, text: message, type: "info" });
};
我正在阅读关于SweetAlerts如何在其中具有功能的示例,我需要帮助调用我的。 如果有人认为他们可以帮助我,我愿意解释任何可能需要的东西,包括我尝试过但失败的东西。我甚至会对如何解决这个问题的一般想法表示感谢。 以下是SweetAlert文档http://t4t5.github.io/sweetalert/的链接。
答案 0 :(得分:2)
我不确定您的代码是如何构建的。 您必须确保该功能可见。
这是一种快速而肮脏的方式:
window.changeView = function(){
// your code
};
window.downloadCurrent = function(){
// your code
};
window.addAsNewButton = function(){
// your code
};
// ...
function printData(data) {
var str = ""
str += '<p>Your file was added!</p>';
str += "<p>You can access it at these locations: </p>";
str += "<button onclick='window.changeView()'/>View all files</button>";
str += "<button onclick='window.downloadCurrent()'/>Download the current file</button>";
str += '<p>To upload this, click here: </p>';
str +='<button onclick="window.addAsNewButton()">Add As New</button>';
return str;
};
更好的方法是使用模块模式(http://toddmotto.com/mastering-the-module-pattern/):
var yourModule = (function () {
return {
changeView : function(){
};
downloadCurrent : function(){
};
addAsNewButton : function(){
};
};
})();
// ...
function printData(data) {
var str = ""
str += '<p>Your file was added!</p>';
str += "<p>You can access it at these locations: </p>";
str += "<button onclick='window.yourModule.changeView()'/>View all files</button>";
str += "<button onclick='window.yourModule.downloadCurrent()'/>Download the current file</button>";
str += '<p>To upload this, click here: </p>';
str +='<button onclick="window.yourModule.addAsNewButton()">Add As New</button>';
return str;
};
我希望它有所帮助。
修改:
更好的方法是在渲染后附加事件(使用jQuery的示例):
var informUser = function(message){
swal({title: "Congrats on uploading a file!", html: true, text: message, type: "info" });
$(".btn-change-view").click(function(){ });
$(".btn-download-current").click(function(){ });
$(".btn-add-as-new").click(function(){ });
};
// ...
function printData(data) {
var str = ""
str += '<p>Your file was added!</p>';
str += "<p>You can access it at these locations: </p>";
str += "<button class="btn-change-view"/>View all files</button>";
str += "<button class="btn-download-current"/>Download the current file</button>";
str += '<p>To upload this, click here: </p>';
str +='<button class="btn-add-as-new">Add As New</button>';
return str;
};
评论后修改:
如果只是这样,你可以试试这个:
var informUser = function(message){
swal({title: "Congrats on uploading a file!", html: true, text: message, type: "info" });
$(".btn-change-view").click(changeView);
$(".btn-download-current").click(downloadCurrent);
$(".btn-add-as-new").click(addAsNewButton);
};