- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个用户控件来显示 Dialogflow 的聊天框,并且我希望 Enter 将框中输入的字符串提交给 JavaScript 事件,而不是后面的代码。我希望能够将此用户控件添加到我的任何 .net 页面,其中包含自己的按钮和输入。不幸的是,这个要求使我无法采取简单的方法并禁用表单中的回车键提交行为。
以下是该控件的 HTML:
<div id="mainWrapper">
<div id="result">
</div>
<div id="inputField">
<input placeholder="Ask me a question" id="query" type="text" />
</div>
<asp:HiddenField ID="access" runat="server" />
</div>
我目前唯一的代码是在页面加载时为该隐藏字段分配一个值。我尝试将输入更改为 asp:TextBox
,并添加 UseSubmitBehavior="False"
,但它仍然会导致回发。我还在我使用的 JavaScript 中添加了 return false;
,但回发似乎发生在运行之前。
以下是相关的 JavaScript:
(function () {
"use strict";
var token, queryInput, resultDiv;
var ENTER_KEY_PRESS = 13;
var client;
window.onload = init;
function init() {
token = document.getElementByID("<%= access.ClientID %>").value;
queryInput = document.getElementById("query");
resultDiv = document.getElementById("result");
queryInput.addEventListener("keydown", keyDown);
}
function keyDown(event) {
if (event.which === ENTER_KEY_PRESS) {
console.log("Enter pressed")
var queryValue = queryInput.value;
queryInput.value = "";
sendTextToDIalogflow(value)
.then(function (response) {
var result;
try {
result = response.result.fulfillment.speech;
} catch (error) {
result = "error: " + error.message;
}
console.log(result)
})
.catch(function (err) {
console.log("Whoops, something went wrong: " + err.message);
});
}
else {
console.log("Enter not pressed")
}
}
return false;
})();
当光标位于文本框中时,如何防止 Enter 键触发回发,而不对页面上的其他 asp.net 控件执行相同的操作?
最佳答案
这可能不是唯一的事情,我注意到您没有遵循查找元素 ID 的模式:
queryInput = document.getElementById("<%= query.ClientID %>");
resultDiv = document.getElementById("<%= result.ClientID %>");
在按键时,您需要防止输入传播。所以这是一个 keydown 更改:
function keyDown(event) {
if (event.which === ENTER_KEY_PRESS) {
console.log("Enter pressed")
var queryValue = queryInput.value;
queryInput.value = "";
sendTextToDIalogflow(value)
.then(function (response) {
var result;
try {
result = response.result.fulfillment.speech;
} catch (error) {
result = "error: " + error.message;
}
console.log(result)
})
.catch(function (err) {
console.log("Whoops, something went wrong: " + err.message);
});
// ADDED CODE
// REFERENCE - https://stackoverflow.com/questions/1639338/why-does-returning-false-in-they-keydown-callback-does-not-stop-the-button-click
if (event.preventDefault) {
event.preventDefault();
} else {
event.returnValue = false;
}
// END ADDED CODE
}
else {
console.log("Enter not pressed")
}
}
关于javascript - 仅当光标位于输入字段时禁用回车键回发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49742356/
我在一个网站上有一个非常简单的登录脚本,它只使用 1 个简单的密码,而且它可以满足我的需要。问题是,它仅在单击“登录”字样时有效。我需要它做的是在按下 Enter 键时也能工作。这是代码:
在我的应用程序中,我有一个全局搜索字段,用于过滤列表中的数据,列表将有多个列。从其他组件设置过滤器值(设置为输入值)它正在发生,但我必须在输入上触发手动键盘事件(输入键)操作。 我尝试使用 viewC
在我的应用程序中,我使用的是 Tinymce。这是我的问题。 场景一 1) 我有这样风格的段落 Paragraph with some content. 当我将光标放在段落末尾并按下回车键时,它会像这
我有一个包含多个下拉列表和一个文本字段以及一个按钮的表单... 当我单击按钮时,会调用一个 ajax 函数...然后 ajax 会调用一个从 mysql 数据库获取结果的 php 函数... 问题是我
我想写一个程序在每句话之后做一个处理。像这样: char letter; while(std::cin >> letter) { if(letter == '\n') { // her
我在某处找到了一个非常适合我的自动完成脚本,但有一件事我不知道如何更改。当您单击下拉列表中的某些内容时,它不会提交此字符串,您必须单击以选择该字符串,然后单击提交按钮或按回车键。我希望此下拉菜单自动完
我在几周前开始使用 Xamarin Studio,但找不到下一个问题的解决方案:创建了一个包含序列号的编辑文本。我想在按下 Enter 后运行一个函数。它工作正常,当我按 Enter 时,函数运行没有
在 Android 和 iOS 中,可以将 keyboard 的 enter/return 键更改为例如“Go”按钮(和其他选项)。 在顶部上,我们可以在两个系统上看到常规的“返回”按钮,这是您在 A
具体代码如下所述: ? 1
我知道如何使用事件来测试何时按下某个键,但在 C 语言中我从来不知道该怎么做。 我真正想要的是一个“KeyListener”,它监听Up、Down、Left 和Right 方向键。我需要它在 Linu
我使用回车键从 v-textarea 输入数据,结果如下 Hello\nWorld 在默认或 rawHtml 不工作的情况下在 v-data-table 中呈现此内容 {{ props.it
我是一名优秀的程序员,十分优秀!