编程焦点事件不会导致焦点事件处理程序触发?

Programatic focus event does not cause focus event handler to fire?

我正在使用程序化的焦点事件,如下所示:

resetInput: function (array, checkbox) {
    _.each(array, function (val) {
        $A.log('input cleared, focussed, blurred for ' + val.id)
        val.value = '';
        val.focus();
        val.blur();
    });
    if (checkbox) {
        checkbox.checked = true;
    }
}

然后我抓取如下:

applyEL: function (input_element, label_element) {
    var self = this,
        $input_element = $(input_element);
    $input_element.on("blur", function () {
        $A.log('Blur Event detected:');
        if (input_element.value === '') {
            $A.log(': with input blank');
            $A.toggleClass(input_element, 'toggle_border_show');
            $A.toggleClass(label_element, 'toggle_label_show');
            $A.animate(label_element, {property: 'fontSize', time: self.P.speed});
        }
    });
    $input_element.on("focus", function () {
        $A.log('Focus Event detected - ');
        if (input_element.value === '') {
            $A.log(' - with input blank:');
            $A.toggleClass(input_element, 'toggle_border_obscure');
            $A.toggleClass(label_element, 'toggle_label_obscure');
        }
    });

当我使用键盘手动触发时,焦点和模糊事件侦听器工作正常。

但是程序化版本不起作用。

我注意到我的输入没有重置(事件处理程序没有正确触发)并添加到日志中以确定这一点。

注:

我还从控制台触发了 focus 和 blur 事件处理程序,但没有看到任何效果。

我的男人,

如果元素的显示设置为 none,您将无法在该元素上使用焦点和模糊事件。 (看起来父元素正在设置它)。

我建议您在将 body 元素设置为隐藏之前重置您的输入。

这应该可以解决您的问题。