gpt4 book ai didi

javascript - 仅当光标位于输入字段时禁用回车键回发

转载 作者:行者123 更新时间:2023-12-03 02:07:31 25 4
gpt4 key购买 nike

我正在开发一个用户控件来显示 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com