【发布时间】:2021-06-23 15:50:11
【问题描述】:
(原始问题)
我现在正在尝试使用 Materialize 布局和组件通过 App Script 开发一个 Web 应用程序。
由于我想创建一个包含不同页面按钮的导航栏(这应该会更改网站的正文部分),我发现每个网站中的元素都无法正常工作。我尝试使用doGet(e) 和一些if-else 参数创建站点路线,这些参数工作得很好,但这会呈现一个全新的页面,而不是保持导航栏在上方。我想知道是否有办法这样做...(我猜这是我更改 innerHTML 的方式错误。)
目前,主页显示正常。但是,当我单击导航栏上的“A”按钮(并在下方显示一个日期选择器)时,它现在会弹出一个应有的选择器。
(0327更新)
对于我的问题有任何误导性,我深表歉意。我尝试使用仅包含我的情况的更新代码来简化下面的问题。
下面的页面是一个包含“datePicker1”元素的mainPage,当我点击上面的“Page A”按钮时,一个新的“datePicker2”被写入到DOM内容中。但是,“dP1”运行良好,它按预期弹出日历,但“dP2”不是。 :(
(附注:我认为我不够清楚:对于前面提到的“导航栏”,我希望它可以作为 HTML 中的标题。)
这是我的代码(更新):
(mainPage.html)
<!DOCTYPE html>
<html language="en">
<head>
<base target="_top">
<title>Title</title>
<script src="https://code.jquery.com/jquery-3.5.1.min.js" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons" >
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.css">
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
</head>
<body>
<!-- navbar -->
<header>
<div class="navbar-fixed">
<nav>
<div class="nav-wrapper teal darken-4">
<div class="row">
<div class="col s10 offset-s1">
<div class="brand-logo">Logo</div>
<ul id="nav-mobile" class="right hide-on-med-and-down">
<li><a onClick="pageSelect(0);">Page A</a></li>
<li><a onClick="pageSelect(1);">Page B</a></li>
<li><a onClick="pageSelect(2);">Page C</a></li>
</ul>
</div>
</div>
</div>
</nav>
</div>
</header>
<section>
<div class="container">
Dateinput 1:
<div class="input-field">
<label for="dateinput1">Dateinput 1</label>
<input id="dateinput1" type="text" class="datepicker">
</div><br>
Dateinput2:
<div id="pageContent">
</div>
</div>
</section>
<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0-beta/js/materialize.min.js"></script>
<script>
$(document).ready(function(){
$('.datepicker').datepicker();
});
</script>
<script>
function changeContent(content){
document.getElementById("pageContent").innerHTML = content;
}
function pageSelect(index){
google.script.run.withSuccessHandler(changeContent).getPage(index);
}
</script>
</body>
</html>
(pageA.html)
<div class="input-field">
<label for="dateinput2">Dateinput 2</label>
<input id="dateinput2" type="text" class="datepicker">
</div>
(backend.gs)
var mainPage = HtmlService.createTemplateFromFile("mainPage");
function doGet() {
return mainPage.evaluate()
.setTitle("mainPage")
.setSandboxMode(HtmlService.SandboxMode.IFRAME)
.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
}
function getPage(index){
let pageName;
switch(index){
case 0: pageName = "pageA"; break;
case 1: pageName = "pageB"; break;
case 2: pageName = "pageC"; break;
}
return HtmlService.createHtmlOutputFromFile(pageName).getContent();
}
我试图自己解决这个问题并一直在寻找,但仍然没有进一步...... 希望我能说清楚,非常感谢!
【问题讨论】:
-
通常导航栏是每个页面的一部分
-
@YvesC - 你能附上
that renders a whole new page instead of keeping the nav-bar above still.的截图吗?我试图复制你的代码,导航栏工作得很好。 -
@Cooper,感谢您的参考。我想我以前不是那么清楚。正如更新后的代码所示,我想使用
<nav>作为保持在页面顶部的标题。 -
@NikkoJ。感谢您的检查,我更新了上面的问题和代码,请检查出来。谢谢很多:)
标签: javascript html google-apps-script