通过javascript自动弹出列表选择的触发事件
我之前在HTML文本输入中输入了值1111、1222和1333。现在,如果我在文本输入中输入1,它将弹出一个列表,其中值1111、1222和1333是可用选项。当选择这些选项中的任何一个时,如何触发事件 我有一个javascript函数,它对通过“onkeyup”事件输入到文本输入中的值执行计算。如果用户只需通过键盘输入值,则此功能非常有效。但是,如果用户正在从自动弹出列表中选择以前输入的值,则该选项不起作用 我知道我们可以通过在表单/文本输入中添加autocomplete=“off”来关闭自动弹出列表。但是有什么办法可以让它与自动弹出列表一起工作吗?我尝试了所有可用的事件选项,包括“onchange”,但没有一个有效 HTML代码非常简单:通过javascript自动弹出列表选择的触发事件,javascript,html,autocomplete,event-handling,input,Javascript,Html,Autocomplete,Event Handling,Input,我之前在HTML文本输入中输入了值1111、1222和1333。现在,如果我在文本输入中输入1,它将弹出一个列表,其中值1111、1222和1333是可用选项。当选择这些选项中的任何一个时,如何触发事件 我有一个javascript函数,它对通过“onkeyup”事件输入到文本输入中的值执行计算。如果用户只需通过键盘输入值,则此功能非常有效。但是,如果用户正在从自动弹出列表中选择以前输入的值,则该选项不起作用 我知道我们可以通过在表单/文本输入中添加autocomplete=“off”来关闭自动
<input id="elem_id_1" name="output" type="text" value="0" onkeyup="update();"/>
您是否尝试过
onchange
事件?我不确定它是否触发自动完成选择,但您也可以尝试onpropertychange
事件并检查value属性:
textInput.onpropertychange = function ()
{
if (event.propertyName == "value")
doCalculation();
}
这也适用于右键单击->粘贴或右键单击->剪切,这不会使用当前方法触发计算
编辑
看起来您可能需要使用事件和计时器的组合。在编辑的焦点上设置一个间隔,并在模糊时清除它。我还将使用IE的onpropertychange使其更高效,并保留keyup事件使其速度更快
//- If it's IE, use the more efficient onpropertychange event
if (window.navigator.appName == "Microsoft Internet Explorer")
{
textInput.onpropertychange = function ()
{
if (event.propertyName == "value")
doCalculation();
}
}
else
{
var valueCheck, lastValue = "";
textInput.onkeyup = function ()
{
doCalculation();
}
textInput.onfocus = function ()
{
valueCheck = window.setInterval(function ()
{
// Check the previous value against (and set to) the new value
if (lastValue != (lastValue = textInput.value))
doCalculation();
}, 100);
}
textInput.onblur = function ()
{
window.clearInterval(valueCheck);
}
}
如果你的计算程序很小(就像一个简单的数学方程),我会省去前面的值检查,每100毫秒运行一次计算 请发布绑定到onkeyup事件的HTML和JS函数Hi,我认为您可以使用onChange事件?onpropertychange事件似乎是IE特有的:啊,很好地指出,看起来唯一的选项是计时器-请参阅我的编辑。
//- If it's IE, use the more efficient onpropertychange event
if (window.navigator.appName == "Microsoft Internet Explorer")
{
textInput.onpropertychange = function ()
{
if (event.propertyName == "value")
doCalculation();
}
}
else
{
var valueCheck, lastValue = "";
textInput.onkeyup = function ()
{
doCalculation();
}
textInput.onfocus = function ()
{
valueCheck = window.setInterval(function ()
{
// Check the previous value against (and set to) the new value
if (lastValue != (lastValue = textInput.value))
doCalculation();
}, 100);
}
textInput.onblur = function ()
{
window.clearInterval(valueCheck);
}
}