Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.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 击倒JS清除焦点上的输入_Javascript_Jquery_Knockout.js_Knockout 2.0 - Fatal编程技术网

Javascript 击倒JS清除焦点上的输入

Javascript 击倒JS清除焦点上的输入,javascript,jquery,knockout.js,knockout-2.0,Javascript,Jquery,Knockout.js,Knockout 2.0,我正在构建一个带有敲除功能的应用程序,它的数字/输入量非常大。我正在修改我的代码,将所有内容放入observableArrays中,这样我就可以将这些数组绑定到我的HTML中,HTML中所有可见的内容都是一个模板,而Knockout正在做腿部工作,以呈现该模板中的所有元素 我现在的问题在于,我以前存在的焦点脚本上的clear输入字段不起作用,我也不完全确定为什么或者如何让它起作用 这是预先存在的脚本,是用jQuery编写的,我觉得现在Knockout和jQuery之间发生了冲突。不幸的是,我不知

我正在构建一个带有敲除功能的应用程序,它的数字/输入量非常大。我正在修改我的代码,将所有内容放入observableArrays中,这样我就可以将这些数组绑定到我的HTML中,HTML中所有可见的内容都是一个模板,而Knockout正在做腿部工作,以呈现该模板中的所有元素

我现在的问题在于,我以前存在的焦点脚本上的clear输入字段不起作用,我也不完全确定为什么或者如何让它起作用

这是预先存在的脚本,是用jQuery编写的,我觉得现在Knockout和jQuery之间发生了冲突。不幸的是,我不知道如何在Knockout中重写脚本

$('input:not(.total-val)').on('focus', function() {
            var default_value = $(this).val();
            if ($(this).val() == default_value) {
                $(this).val('');
            }
            $(this).blur(function () {
                if($(this).val().length == 0) /*Small update*/
                {
                    $(this).val(default_value);
                }
            });
        });
提前谢谢

您应该在('focus')上使用Knockout的绑定而不是jQuery的绑定。我担心jQuery与Knockout的绑定事件冲突,导致文本在焦点上消失。下面是一个例子:

<p>
    Name: 
    <b data-bind="visible: !editing(), text: name, click: edit">&nbsp;</b>
    <input data-bind="visible: editing, value: name, hasFocus: editing" />
</p>
<p><em>Click the name to edit it; click elsewhere to apply changes.</em></p>

jQuery和Knockout在争夺对生成的输入的控制时发生了冲突。我修复了这个问题,在香草中重构clear输入脚本

$('input:not(.total-val)').attr({'onfocus':'onFocus(this)', 'onblur':'onBlur(this)'})
        var default_value;
        onFocus = function(input) {
            default_value = input.value;
            if (input.value == default_value) {
                input.value = ''
            }
        }
        onBlur = function(input) {
            if (input.value == '') {
                input.value = default_value;
            }
        }

这不是我想要的-我需要针对每一个输入,单击输入时必须触发click:处理程序,而不是其他元素。根据构建HTML的方式,可以使用这种方法。单击元素时,将触发“单击”事件。我只是举个例子。它可以很容易地扩展为不同的HTML标记。如果要在
ko.observableARay
上使用
foreach
绑定,可以将
hasFocus
/
单击
绑定应用于集合中的每个元素。我强烈建议利用knockout的内置绑定,但我很高兴您已经知道如何使用vanilla JavaScript实现所需的效果。
$('input:not(.total-val)').attr({'onfocus':'onFocus(this)', 'onblur':'onBlur(this)'})
        var default_value;
        onFocus = function(input) {
            default_value = input.value;
            if (input.value == default_value) {
                input.value = ''
            }
        }
        onBlur = function(input) {
            if (input.value == '') {
                input.value = default_value;
            }
        }