Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过javascript自动弹出列表选择的触发事件_Javascript_Html_Autocomplete_Event Handling_Input - Fatal编程技术网

通过javascript自动弹出列表选择的触发事件

通过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”来关闭自动

我之前在HTML文本输入中输入了值1111、1222和1333。现在,如果我在文本输入中输入1,它将弹出一个列表,其中值1111、1222和1333是可用选项。当选择这些选项中的任何一个时,如何触发事件

我有一个javascript函数,它对通过“onkeyup”事件输入到文本输入中的值执行计算。如果用户只需通过键盘输入值,则此功能非常有效。但是,如果用户正在从自动弹出列表中选择以前输入的值,则该选项不起作用

我知道我们可以通过在表单/文本输入中添加autocomplete=“off”来关闭自动弹出列表。但是有什么办法可以让它与自动弹出列表一起工作吗?我尝试了所有可用的事件选项,包括“onchange”,但没有一个有效

HTML代码非常简单:

<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);
    }
}