动态创建的文本输入不会调整宽度

时间:2013-10-16 13:07:18

标签: javascript jquery html css

一个简单的问题我试图根据用户输入自动调整输入文本字段的大小,并且我在动态创建的输入文本字段方面存在一些问题,而其他问题正在起作用。

这是javascript,我正在使用:

<script>
(function($){
        $.fn.autoGrowInput = function(o) {

            o = $.extend({
                maxWidth: 1000,
                minWidth: 0,
                comfortZone: 70
            }, o);

            this.filter('input:text').each(function(){

                var minWidth = o.minWidth || $(this).width(),
                    val = '',
                    input = $(this),
                    testSubject = $('<tester/>').css({
                        position: 'absolute',
                        top: -9999,
                        left: -9999,
                        width: 'auto',
                        fontSize: input.css('fontSize'),
                        fontFamily: input.css('fontFamily'),
                        fontWeight: input.css('fontWeight'),
                        letterSpacing: input.css('letterSpacing'),
                        whiteSpace: 'nowrap'
                    }),
                    check = function() {

                        if (val === (val = input.val())) {return;}

                        // Enter new content into testSubject
                        var escaped = val.replace(/&/g, '&amp;').replace(/\s/g,'&nbsp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
                        testSubject.html(escaped);

                        // Calculate new width + whether to change
                        var testerWidth = testSubject.width(),
                            newWidth = (testerWidth + o.comfortZone) >= minWidth ? testerWidth + o.comfortZone : minWidth,
                            currentWidth = input.width(),
                            isValidWidthChange = (newWidth < currentWidth && newWidth >= minWidth)
                                                 || (newWidth > minWidth && newWidth < o.maxWidth);

                        // Animate width
                        if (isValidWidthChange) {
                            input.width(newWidth);
                        }

                    };

                testSubject.insertAfter(input);

                $(this).bind('keyup keydown blur update', check);

            });

            return this;

        };

    })(jQuery);

    $('input').autoGrowInput();

</script>

这就是我创建文本输入字段的方式:

                var tracktitleinput = document.createElement('input');
                tracktitleinput.setAttribute('type', "text");
                tracktitleinput.setAttribute('name', "tracktitle");
                tracktitleinput.setAttribute("required", true);
                tracktitleinput.setAttribute("placeholder",
                        "Required Field");
                tracktitleinput.setAttribute("class", "required");

它与这些完美配合:

<input type="text" id="releasename" name="releasename" required="true" placeholder="Required Field" />

2 个答案:

答案 0 :(得分:1)

创建新输入时,需要为这些元素调用autoGrowInput()函数:

var $newInput = $('<input/>', {
    type : 'text',
    name : 'tracktitle',
    required : 'true',
    placeholder : 'Required Field',
    class : 'required'
}).autoGrowInput();

答案 1 :(得分:0)

如果他们在致电$('input').autoGrowInput();时不存在,我不确定您为什么希望他们将这些功能附加到他们身上。 jQuery并不神奇,它不会自动知道你加载的页面应该应用于当时不存在的元素时运行的代码,除非你明确告诉它(并且只能工作)通过事件委托进行的事件。)

在创建动态添加的元素时,您需要再次调用插件:

$(tracktitleinput).autoGrowInput();