javascript - 如何修复 JS 不适应新的 HTML 输入
问题描述
我想让我的用户为我正在制作的主页选择一个搜索引擎。问题是如果他们选择了一个并想回到另一个 - 结果是一样的
我已经尝试过 if then 语句,但如果用户选择不同的东西,它会保持不变。
function search() {
var se = document.getElementById("se").value;
var query = document.getElementById("search").value;
if (se.value = "ddg") {
var searchb4plus = "https://www.duckduckgo.com/?q=" + query
}
if (se.value = "google") {
var searchb4plus = "https://www.google.com/search?q=" + query
}
var search = searchb4plus.split(' ').join('+');
window.open(search, "_self");
}
<input id=search placeholder=" Search now!" maxlength=100>
<button onclick=search()></button>
<p style="color:black;">Search Engine:</p>
<select id=se>
<option value=ddg>DuckDuckGo</option>
<option value=google>Google</option>
</select>
<br>
<p style="color:black;">These settings don't save.</p>
<br>
<button onclick=hsettings() style="display:none;" id=sbutton>Hide Settings</button>
预期的结果是,如果他们一开始选择 Google,然后想使用 DuckDuckGo,他们只需搜索 DuckDuckGo。相反,即使他们选择了 DDG,它仍然使用 Google。
解决方案
问题 1
看线:
var se = document.getElementById('se').value
您已经通过该.value
属性获取了它的价值。
然后,在你的if
陈述中,你有:
if (se.value = 'ddg')
您正在使用.value
再次。但是,这一次,不是 的值,input#se
而是字符串值的“值”属性input#se
。中没有.value
属性String
,所以它是未定义的。
您应该做的是.value
仅从实际元素中获取属性。
function search() {
var se = document.getElementById("se");
var query = document.getElementById("search").value;
if (se.value = "ddg") {var searchb4plus = "https://www.duckduckgo.com/?q=" + query}
if (se.value = "google") {var searchb4plus = "https://www.google.com/search?q=" + query}
var search = searchb4plus.split(' ').join('+');
window.open(search, "_self");
}
或者
function search() {
var se = document.getElementById("se").value;
var query = document.getElementById("search").value;
if (se = "ddg") {var searchb4plus = "https://www.duckduckgo.com/?q=" + query}
if (se = "google") {var searchb4plus = "https://www.google.com/search?q=" + query}
var search = searchb4plus.split(' ').join('+');
window.open(search, "_self");
}
问题 2
在你的if
陈述中,你写道:
if (se.value = 'ddg')
注意单=
号。单个“=”符号用于赋值,而不是用于比较。所以最后一个if
总是返回true
,所以你的用户总是使用谷歌搜索而不是 DDG。
你应该这样写:
if (se.value === 'ddg')
工作样本
function search() {
var se = document.getElementById("se");
var query = document.getElementById("search").value;
if (se.value === "ddg") {
var searchb4plus = "https://www.duckduckgo.com/?q=" + query
}
if (se.value === "google") {
var searchb4plus = "https://www.google.com/search?q=" + query
}
var search = searchb4plus.split(' ').join('+');
/* Comment this out because can't open tab using SO's code snippet
window.open(search, "_self");
*/
console.log(search)
}
<input id=search placeholder=" Search now!" maxlength=100>
<button onclick=search()></button>
<p style="color:black;">Search Engine:</p>
<select id=se>
<option value=ddg>DuckDuckGo</option>
<option value=google>Google</option>
</select>
<br>
<p style="color:black;">These settings don't save.</p>
<br>
<button onclick=hsettings() style="display:none;" id=sbutton>Hide Settings</button>
推荐阅读
- chat - 如何将 Zoom 聊天中的文本“路由”到另一个应用程序(如 Max/MSP)。(self.learnprogramming)
- reactjs - 使用来自 Redux 状态的数据更新功能组件本地状态
- python - 残差图诊断以及如何改进回归模型
- python - 如何使用 python 为图像生成关键字、主题标签或标签?
- excel - Excel/VBA 组合表格
- java - 使用 jSerialComm 库的串行端口访问应用程序未收到 LISTENING_EVENT_DATA_AVAILABLE 事件
- javascript - 从 Ajax 中的响应映射中获取值并在 HTML/JSP 中呈现它
- django-views - 未找到 Django 错误:服务器日志中的 /NONE
- visual-studio - 使用购买的 CA 签名的 ClickOnce 应用程序显示“未知发布者”
- java - 我可以在 Hazelcast 中使用 LinkedHashMap 吗?