【问题标题】:Live focus issues with dymaic input fields动态输入字段的实时焦点问题
【发布时间】:2012-02-17 01:45:47
【问题描述】:

我正在尝试制作一个动态输入字段解决方案,类似于我的dynamical select rows 方法。

这个想法很简单。总会有一个额外的字段。因此,当最后一个字段成为焦点时,它将克隆它并将其附加到包装器中。

My current code.focus() 一起使用,因此不是动态的。但是,.live('focus', function () {}) doesn't。此外,“实时更改”或“实时聚焦”也不起作用。

这似乎是一个非常奇怪的问题,因为它在this question 中被清除,从 1.4 版本开始应该支持“实时焦点”。但是,它显然不起作用。而且大多数其他问题都有非常本地化的解决方案,具有替代功能。

这就是我的知识结束的地方,我没有更多的想象力,寻找替代解决方案。

PS:如果这个想法完全失败,那么更改事件触发器将是一个替代方案。但是,“实时更改”是否仅适用于 select 和/或 tick 输入?

【问题讨论】:

    标签: jquery events focus live


    【解决方案1】:

    无法说明为什么.live 会失败(示例失败的代码会很好),但是为什么不在克隆期间添加对.focus 的调用呢?将新字段添加到 DOM 后将是微不足道的。不确定在这种情况下“动态”是什么意思,但听起来这就是你所需要的。过去曾使用这种技术实现过类似的表单元素,效果很好。

    【讨论】:

    【解决方案2】:

    所以毕竟问题不在于实时对焦功能,而在于获取正确的最后一个字段。代码不够动态,无法真正重新计算当前的最后一个。虽然我的某些部分,.live() 负责所有事情,但它没有(不要在累的时候编码!)。

    因此,当我手动将实时函数选择器更改为 .dynamicalfields_wrapper input:last 时,它运行良好。所以我修改了我的代码以使其更具动态性,但仍然使用全局 jQuery 函数的包装器选择器。

    (function ($) {
        $.fn.DynamicalFieldsUpdater = function () {
            return this.each(function (i, wrapper) {
                $(wrapper).find('input:last').css('background', 'red').live('focus', function (i, last) {
                    $(wrapper).append($(this).clone().val(''));
                });
            });
        };
    })(jQuery);
    $('.dynamicalfields_wrapper').DynamicalFieldsUpdater();
    

    [View output]

    按预期工作。也适用于更改,只是不是“更改”-更改,而是keypress

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-19
      • 2011-10-12
      • 2019-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多