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