javascript - 使用 addEventListener() 方法从表单重定向页面
问题描述
我正在尝试从表单中获取输入值以将用户重定向到新页面。环境在 Sharepoint Online 中。
我不能使用 HTML 事件(即 onclick 或 onkeypress),这就是我决定使用事件侦听器的原因。
我已经在本地测试了代码并且知道它可以处理上述事件,但我被要求删除它们以防止 XSS 类型的攻击。
我尝试使用事件侦听器,但似乎无法让它按照我想要的方式工作。
HTML 代码:
<form method="get" action="" class="search-container">
<input id="search-input" type="text" placeholder="Search...">
<a class="material-icons" id="search-submit" >search</a>
</form>
JS代码:
document.getElementById('search-input').addEventListener('keypress', searchKeyPress)
function searchKeyPress(e) {
e = e || window.event;
if (e.keyCode === 13)
{
document.getElementById('search-submit').click();
//alert('Enter Pressed')
return false;
}
return true;
}
document.getElementById('search-submit').addEventListener('click', redirect)
// redirect function
function redirect() {
//look for search id
var item = document.getElementById("search-input").value;
// alert(item)
//redirect page
alert('Search Icon Clicked')
window.location.href = "https://domain.sharepoint.com/sites/Intranet/_layouts/15/osssearchresults.aspx?u=https%3A%2F%domain%2Esharepoint%2Ecom%2Fsites%2FIntranet&k=" + item + "&ql=1036";
}
我希望能够重定向到 中的页面
window.location.href
,但页面会刷新。
任何帮助,将不胜感激。
解决方案
找到了解决方案!
事实证明,事件侦听器被解释为 null。为了解决这个问题,我确保它在窗口加载之后加载。
添加密钥也很有用e.preventDefault();
。Enter
见下文:
// Make sure code loads after window loads
window.onload = function(){
var input = document.getElementById('search-input')
input.addEventListener('keypress', searchKeyPress);
var submit = document.getElementById('search-submit')
submit.addEventListener('click', redirect);
};
//Input Keypress function
function searchKeyPress(e) {
// event.preventDefault();
e = e || window.event;
if (e.keyCode === 13)
{
e.preventDefault();
document.getElementById('search-submit').click();
//alert('Enter Pressed');
return false;
}
return true;
}
// redirect function
function redirect() {
//look for search id
var item = document.getElementById("search-input").value;
// alert(item)
//redirect page
alert('Search Icon Clicked')
window.location.href = "https://domain.sharepoint.com/sites/Intranet/_layouts/15/osssearchresults.aspx?u=https%3A%2F%domain%2Esharepoint%2Ecom%2Fsites%2FIntranet&k=" + item + "&ql=1036";
}
推荐阅读
- php - php - 如何将 unicode 转换为 utf-8 字符串
- angular - 使用 Apache Webserver 代理 Angular 和 Apache Sling 服务器
- django - 从 Fullname 字段生成用户名并添加 8 个字符字符串
- firebase - 访问 API 并从预定函数写入 Cloud Firebase
- excel - Excel公式返回第一个静态字符和两个可能的第二个字符之一之间的字符串?
- java - 选择银行账户并使用菜单使用该账户
- javascript - 为什么这个简单的 hello world Vue 应用程序会因未找到挂载而失败?
- amazon-web-services - 在 appspec.yml 中提到可执行文件的位置
- c++ - 在 Visual Studio Code Linux 上激活 conda 环境
- android - Fire base google 身份验证不会传递真实的虚构信息