javascript - 当事件发生(单击按钮)时,如何将数据从模式对话框发送到侧边栏(反之亦然)?
问题描述
我有一个带有简单表单的侧边栏,其中有一个下拉菜单,可以选择条目的某些类别。它旁边有一个按钮供用户添加新类别。这个按钮显示一个模态对话框,在这个对话框中有一个输入框供用户输入新的类别名称和一个“添加新”按钮,它将把新项目发送回侧边栏。我希望相应的下拉列表将新类别包含在其选项中,并且其文本已经填充了新名称。
到目前为止,我所能想到的只是使用,localStorage
但是当按下按钮并关闭对话框并提交新值时,我不知道如何触发对侧边栏(或任何其他元素)下拉列表的更新。我一直在看这个和这个,但我真的无法让它适用于我的情况。
我压制了这些Code.gs
作品,因为它们工作得很好并且不相关。
sidebar.html
<script>
document.getElementById("btn-add-category").addEventListener("click", goToAddNewItem);
function goToAddNewItem(){
google.script.run.loadNewItemForm();
}
(async () => {
//After modal dialog has finished, receiver will be resolved
let receiver = new Promise((res, rej) => {
window.modalDone = res;
});
var message = await receiver;
document.getElementById("category-sidebar").value = message
})();
</script>
modal.html
这是html
模态对话框的文件:
<body>
<div class="form-group" id="input-category">
<label for="category">Category:</label>
<div class="input-group input-line">
<input type="text" class="form-control form-control-sm" id="category">
</div>
</div>
<div class="form-group">
<button id="btn-add-new" class="btn btn-dark btn-sm">Add New</button>
</div>
<script>
function findSideBar(limit) {
let f = window.top.frames;
for (let i = 0; i < limit; ++i) {
try {
if (
f[i] /*/iframedAppPanel*/ &&
f[i].length &&
f[i][0] && //#sandboxFrame
f[i][0][0] && //#userHtmlFrame
window !== f[i][0][0] //!== self
) {
console.info('Sidebar found ');
var sidebar = f[i][0][0];
sidebar.modalDone(document.getElementById("category").value);
}
} catch (e) {
console.error(e);
continue;
}
}
};
function afterAddNewClicked(){
findSideBar(10);
google.script.host.close();
}
document.getElementById("btn-add-new").addEventListener("click", afterAddNewClicked);
</script>
</body>
编辑:
modal.html
现在有这个功能findSidebar
解决方案
sidebar.modalDone = document.getElementById("category").value
res
或modalDone
需要调用。仅仅分配一个值是行不通的。尝试
sidebar.modalDone(document.getElementById("category").value);
推荐阅读
- python - 使用 Selenium webdriver Python 打开 Instagram
- java - 如何优雅地结束 spring @Schedule 任务?
- bash - 使用 Bash 在两个文件之间逐列合并
- mysql - 多个外键或多个表?
- javascript - 是否可以在 js 中创建一个不和谐的机器人,从邀请链接或服务器 ID 获取服务器的成员数?
- powerbi - 该表达式引用多个列。不能将多列转换为标量值。电源BI
- c# - Asp.Net 核心身份 - UserManager.Users.Any() 总是返回 false
- postgresql - Doctrine Join 与复合键
- outlook - 获取 Office 365 邮件 ID int Outlook 或 Web for Graph API
- python - 如何在灰度图像集上创建 keras conv2d 层