【问题标题】:knockout click event is canceled by focusout event淘汰点击事件被focusout事件取消
【发布时间】:2014-04-06 12:06:08
【问题描述】:

我有一个带有输入标签和“X”按钮的表单来清理输入值。 当输入没有焦点时,这个按钮应该被隐藏,所以当输入没有焦点时,我有一个 focusout 事件来隐藏它。但是当用户点击“X”按钮时 - 它首先进入 focusout 事件并且不会调用该按钮的点击事件。

这是我的html:

 <input type="text" id="entityName" data-bind="value: name" maxlength="100"     name="name" />
 <span class="clearTextIcon" data-bind="click:$root.clearText"></span>

这是我的代码

this.clearText = function (o, e){
                $(e.target).prev().val('');
            };

            $('body').on('focusout', 'input', function(e){
                    $(this).siblings('.clearTextIcon').hide();

            });

【问题讨论】:

  • 这只是一个错字吧?! $(this);.siblings
  • 是的,谢谢。应该是 $(this).siblings('.capbClearTextIcon').hide();

标签: jquery knockout.js


【解决方案1】:

你根本不需要这些 jQuery 的东西。只需使用visible 绑定处理程序:

HTML:

<input type="text" data-bind="value: name,
                              valueUpdate: 'input',
                              hasFocus: name.editing" />

<span data-bind="event: { mousedown: $root.clearText },
                 visible: name() && name.editing()">X</span>

JavaScript:

var viewModel = function(){
    var self = this;

    this.clearText = function(){
        self.name('');
    };

    this.name = ko.observable('');
    this.name.editing = ko.observable(false);
}

ko.applyBindings(new viewModel());

Updated Fiddle

【讨论】:

  • 感谢您的回答。这可以帮助我在输入中没有值时隐藏它,但是当用户不专注于输入时如何隐藏它?
猜你喜欢
  • 2015-02-24
  • 2012-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-02
  • 2018-02-27
  • 2021-03-06
相关资源
最近更新 更多