0

我正在尝试为 hasFocus 添加一个自定义活页夹,使其像这样工作

ko.bindingHandlers.hasfocus = {

//update the control when the view model changes
update: function (element, valueAccessor) {
    ko.unwrap(valueAccessor());
    alert('update');
    setTimeout(function () {
        alert(3);
        if (value
            && element.offsetWidth && element.offsetHeight
            && document.activeElement && document.activeElement != element) {
            element.focus();
            ko.utils.triggerEvent(element, "focusin"); // For IE, which doesn't reliably fire "focus" or "blur" events synchronously
        }
    });
}

};

但它永远不会进入这个功能。我正在关注这个例子

http://jsfiddle.net/mbest/tAGmp/

问题是,我的输入字段在开始时是不可见的。如果我点击某个地方,它就会变得可见。输入字段如下所示

<input type="text"  data-bind="hasFocus: true" />

我试图让它与硬代码值一起工作。如果它有效,那么我会将其更改为一些可观察的。有什么想法吗?

4

1 回答 1

0

我在这里更新了小提琴。正如您在控制台中看到的,它最初是在输入值时触发的。

http://jsfiddle.net/tAGmp/11/

ko.bindingHandlers.hasfocus = {
    update: function(element, valueAccessor) {
        console.log('update');
        var value = ko.utils.unwrapObservable(valueAccessor());
        setTimeout(function() {
            if (value
                && element.offsetWidth && element.offsetHeight
                && document.activeElement && document.activeElement != element)
            {
                element.focus();
                ko.utils.triggerEvent(element, "focusin"); // For IE, which doesn't reliably fire "focus" or "blur" events synchronously
            }
        },0);
    }
};

希望这会有所帮助。

于 2016-06-23T12:38:14.090 回答