我有以下代码:
var supportOnInput = 'oninput' in document.createElement('input');
$("input[maxlength], textarea[maxlength]").each(function() {
var $this = $(this);
var maxLength = parseInt($this.attr('maxlength'));
$this.attr('maxlength', null);
var el = $("<span class=\"character-count label bg-success\">" + maxLength + "</span>");
el.insertAfter($this);
$this.bind(supportOnInput ? 'input' : 'keyup', function() {
var cc = $this.val().length;
el.text(maxLength - cc);
if(maxLength < cc) {
el.addClass("bg-danger");
} else {
el.removeClass("bg-danger");
}
});
});
问题是它需要考虑动态生成的输入元素。更改bind
为on
不一定能解决它,因为问题在于each
迭代器。是否有一个聪明的解决方案可以让它发挥作用?
更新:
为了详细说明这个问题,我有一个评论表单,可以接受一定长度的输入。上面的脚本对字段的长度执行客户端验证。它正常工作,但如果字段本身是动态生成的(例如,通过 AJAX 添加的帖子具有需要此验证的评论字段),则它不起作用。我认为它发生在$.each()
迭代器函数中,因为它只会在页面加载时查看当前存在的元素,并且它并没有像现在这样绑定.on()
。所以,我的问题是,替换上述代码的最聪明的方法是什么,它可以与动态生成的元素一起使用?