Javascript 仅当光标位于输入字段中时才禁用enter键回发
我正在使用一个用户控件来显示Dialogflow的聊天框,我希望enter将框中输入的字符串提交给JavaScript事件,而不是代码隐藏。我希望能够将此用户控件添加到我的任何.net页面中,这些页面包含自己的按钮和输入。不幸的是,这个要求使我无法采取简单的方法并禁用表单中的enter键提交行为 以下是控件的HTML:Javascript 仅当光标位于输入字段中时才禁用enter键回发,javascript,asp.net,vb.net,dialogflow-es,Javascript,Asp.net,Vb.net,Dialogflow Es,我正在使用一个用户控件来显示Dialogflow的聊天框,我希望enter将框中输入的字符串提交给JavaScript事件,而不是代码隐藏。我希望能够将此用户控件添加到我的任何.net页面中,这些页面包含自己的按钮和输入。不幸的是,这个要求使我无法采取简单的方法并禁用表单中的enter键提交行为 以下是控件的HTML: <div id="mainWrapper"> <div id="result"> </div> <div id
<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>
当光标位于文本框中时,如何防止enter键触发回发,而不对页面上的其他asp.net控件执行相同操作?这可能不是唯一的问题,我注意到您在查找元素ID时没有遵循您的模式:
queryInput = document.getElementById("<%= query.ClientID %>");
resultDiv = document.getElementById("<%= result.ClientID %>");
我刚刚将您提供的代码添加到函数中,它似乎没有停止回发。它应该是事件。不是e,因为您使用事件作为参数…我更新了它…我还建议您将init函数放到底部我添加了一个概念,这样您就可以看到在操作中…显然在我的提琴中,我不能使用asp.net客户端id或自定义函数-
queryInput = document.getElementById("<%= query.ClientID %>");
resultDiv = document.getElementById("<%= result.ClientID %>");
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")
}
}