繁体   English   中英

表单元素迭代,使用Javascript

[英]Form element Iteration, in Javascript

我一直在为自己创建的模板模块编写代码段,可以这么说。 我试图遍历页面上的所有文本区域,并通过一些非常基本的验证应用格式。

Javascript不是我的最强选择,但我可以理解到一定程度,我的问题是如何收集ID,然后使用它们来应用格式。

例如,

for each (textarea) 
{
    collect character restriction from html
    display character restriction in a formatted manner
}

我已经包括了我用来构建此代码段的JSFiddle

我建议为此创建一个原型类,可以将其扩展为做其他事情:

var CharWatcher = function(input){
  this.max = input.getAttribute('max-length');
  this.input = input;

  input.onKeyDown = this.update.bind(this);

  this.wrapper = document.createElement('div');
  this.wrapper.innerHTML = 'Chars left: '+ (max - input.value.length);
  /* style wrapper element */
  /* append around input */
};

CharWatcher.prototype = {
  update: function(){
     this.wrapper.innerHTML = 'Chars left: ' + (this.max - this.input.value.length);
  }
};

/* Somewhere else */

var textareas = document.getElementsByTagName('textarea');
for(var i = 0, l = textareas.length; i < l; i++)
    new CharWatcher(textareas[i]);

我基于@FodorZoltán的课程。 我班上课了:

  • 将计数器添加到文本区域下方;
  • 将计数器放在文本区域的下面;

是的,我很懒,代码已经长大了。 我添加了一些事件,并将类名称重命名为"TextAreaRanger" 它在这里工作:

var TextAreaRanger = function(input) {

    this.MAX = parseInt(input.getAttribute('maxlength'));
    this.INPUT = input;

    // add input events
    input["oncut"] =
    input["onpaste"] =
    input["onkeydown"] =
    input["onkeyup"] = this.update.bind(this);

    // create wrapper element
    this.wrapper = document.createElement('div');
    this.wrapper.innerHTML = 'Chars left: '+ (this.MAX - input.value.length);

    /* input parent element */
    var ipar = input.parentNode;

    // find input's i
    for (var i = 0, el; el = ipar.children[i]; i ++) {
        if(el === input) break;
    }

    // append wrapper below the input
    if (ipar.children[++i]) {
        ipar.insertBefore(this.wrapper, ipar.children[i]);
    } else ipar.appendChild(this.wrapper);

    /* stylize wrapper */
    this.wrapper.style.position = "relative";
    this.wrapper.style.color = '#f00';
    this.wrapper.style.fontSize = '11px';
    this.wrapper.style.left = (input.offsetLeft + (input.offsetWidth - 100)) + "px";
    this.wrapper.style.top = (-parseInt(this.wrapper.style.fontSize) * 2) + "px";
};

// Update the counter
TextAreaRanger.prototype["update"] = function() {
    this.wrapper.innerHTML = 'Chars left: ' + (this.MAX - this.INPUT.value.length);
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM