【问题标题】:Is there a way to get direct binding to a "number" input field that watches the arrows?有没有办法直接绑定到观察箭头的“数字”输入字段?
【发布时间】:2012-05-29 03:35:40
【问题描述】:

我有一组输入,对于我输入的每个值,我都有一个“范围”滑块和一个“数字”输入。我有一点 JS 由滑块和数字字段调用,每个输入都使用 onchange="send(input_id, input_kind, this.value)" 属性。 如果滑块移动了,我会更新数字,如果数字改变了,我会更新滑块。

这对滑块来说很好,只要一个人移动它,数字就会开始跟踪。当使用小向上/向下箭头调整数字或键入数字时,滑块不会更新。在选择另一个字段之前不会调用 JS,即输入失去焦点然后将其数据传递给我的 bind{k, d, v} 函数。

HTML:

            <div class="number-pair">
                <sub-title>X-Position</sub-title><br />
                <input id="/layout/1/slider" class="slider" type="range" value="0" min="-1" max="1" step="0.01" onchange="bind('/layout/1', 'slider', parseFloat(this.value))" />
                <input id="/layout/1/number" class="number-box" type="number" value="0" min="-1" max="1" step="0.01" onchange="bind('/layout/1', 'number', parseFloat(this.value))" /><br />    
            </div>

JS:

        function bind(id, control, v)
        { 
            if (control=="slider")
            {
            if (console) console.log("It's a slider");
                e = document.getElementById("/layout/1/number");
                if (e)
                {
                    e.value = v;
                }
            } else if (control=="number")
            {
            if (console) console.log("It's a float");                   
                e = document.getElementById("/layout/1/slider");
                if (e)
                {
                    e.value = v;
                }
            }
        }

如何使用数字箭头获得响应更快的绑定?

注意我不仅将两个输入相互绑定,还绑定到其他地方的屏幕效果,因此在这种情况下移动响应式绑定是可取的,而不仅仅是我可以使用的滑块。 此外,我使用文字来更新我的 JS 中的配对值,但文字将被动态表达式替换,因此我可以绑定整个范围的滑块/文本数字输入对。

【问题讨论】:

  • 问为什么当用户输入type="number" 时没有触发更改事件,这是一种非常啰嗦的方式吗?

标签: javascript html data-binding input range


【解决方案1】:

在输入字段上,绑定到onkeypress,而不是onchange 事件,因为在控件失去焦点之前不会调用onchange 事件。要捕获箭头按下,请绑定到 onclick 事件。

【讨论】:

    【解决方案2】:

    你为什么不尝试使用 onkeypress 和 onclick:

                <div class="number-pair">
    <br />
    


    【讨论】:

    • 您是否建议我可以在 CSS 类 .number.pair {} 中做到这一点?
    【解决方案3】:

    onchange 仅在元素失去焦点时触发事件。

    您应该使用更具响应性的反馈:

    onmousedownonmouseup滑块上的事件,您也可以使用onmousemove来“实时”效果。 onkeypress 在文本字段中。

    【讨论】:

    • 我可以一次分配多个事件类型,例如"?
    • 我不确定你是否可以这样做,但我宁愿通过 javascript 附加事件。使用 javascript 内联不是一个好习惯。
    • 是的,这将是我重构代码的下一个问题——让我的第一个 Web 应用程序如此起步。我应该在上面问一个关于这个的新问题还是一个全新的线程?
    • 我认为您的问题与上述代码本身无关,因此如果之前没有回答,您应该打开一个新线程。只要确保你总是在提问之前搜索,因为很多已经有了很好的答案,当然你不必等待答案;)
    • 你能为我推荐最好的令牌来搜索将 JS 代码动态分配给(比如说)输入控件的方法吗?这对我来说是全新的,不知道 HTML/CSS/JS 的滚动方式!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-17
    • 2018-11-11
    相关资源
    最近更新 更多