使用 Javascript 将 Textarea 的 MaxLength 设置为 50 [重复]

Posted

技术标签:

【中文标题】使用 Javascript 将 Textarea 的 MaxLength 设置为 50 [重复]【英文标题】:Set MaxLength of Textarea to 50 Using Javascript [duplicate] 【发布时间】:2021-03-25 10:24:33 【问题描述】:

我正在尝试仅使用 javascripttextarea 字段的字符限制设置为 50 个字符。我不能直接编辑 textarea 字段的 html

这是我尝试过的代码:

HTML

<textarea class="field-element " id="textarea-yui3" spellcheck="false"></textarea>

Javascript

<script>
document.getElementById("textarea-yui3").maxLength = "50";
</script>

这不起作用。任何帮助将不胜感激。

【问题讨论】:

如果我把你的代码放到一个 sn-p 中,它就可以工作。 不,因为它要求我能够添加 onkeypress="return enforceMaxLength(event, this, 110);"到我的 textarea 标签,这是我做不到的。该解决方案必须完全在 javascript 中完成,而无需直接编辑 textarea。如果这需要注入 onkeypress 事件,那就这样吧。 maxLength 应该是maxlength(小写)。也尝试使用 setAttribute('maxlength', "50"); @MohamedMufeed 在MDN 上对我来说看起来像maxLength,而且如前所述,它对我有用,如果是错字,情况就不会如此。 对不起,我把元素的属性和对象的属性弄错了。属性是什么:在小情况下。所以,.setAttribute('maxlength', '50') 应该没问题。 【参考方案1】:

在事件 onkeypress 时在 textarea 中添加函数。代码如下:

let textarea = document.querySelector("form div.form-item textarea.field-element");
textarea.maxLength = "50";
textarea.onkeypress = function(e) 
   if (e.keyCode == 8)  return true; 
   return this.value.length < this.maxLength;
;
<html>
<body>
    <form data-form-id="5d276a629196ad00019f6f19" data-success-redirect="" autocomplete="on" id="yui_3_17_2_1_1607975626173_414">      
        <div class="field-list clear" id="yui_3_17_2_1_1607975626173_413">
              <div id="textarea-yui_3_17_2_1_1562863586015_217028" class="form-item field textarea">                
            <label class="title" for="textarea-yui_3_17_2_1_1562863586015_217028-field">
              Enclosure card message or Coments              
            </label>
                <textarea class="field-element " id="textarea-yui_3_17_2_1_1562863586015_217028-field"></textarea>
              </div>
            <div id="select-yui_3_17_2_1_1562863586015_217961" class="form-item field select">                
            <label class="title" for="select-yui_3_17_2_1_1562863586015_217961-field">
              Gift wrap              
            </label>
                <select id="select-yui_3_17_2_1_1562863586015_217961-field" name="select-yui_3_17_2_1_1562863586015_217961-field">                  
                    <option value="General">General</option>                  
                    <option value="Female gift">Female gift</option>                  
                    <option value="Male gift">Male gift</option>                  
                    <option value="Holiday / Seasonal">Holiday / Seasonal</option>                  
                </select>
              </div>
        </div>
      <div data-animation-role="button" class="form-button-wrapper">
        <input class="button sqs-system-button sqs-editable-button" type="submit" value="Add To Cart">
      </div>      
      <div class="hidden form-submission-text"></div>
      <div class="hidden form-submission-html" data-submission-html=""></div>
    </form>
</body>
</html>

代码更新!

【讨论】:

如果他们粘贴? 这不起作用。这是设置文本区域的地方。如果您访问 prosescrossingconfections.com/products/turtles,选择任何尺寸,选择任何选项,然后单击添加到购物车。弹出一个窗口,允许您添加消息。这是我试图限制字符的框。 @FeliciaSantos,代码已更新! 这类似于我作为第一条评论添加到问题中的副本中提供的解决方案。 这看起来很棒,但它不起作用。我想知道这是否与灯箱中的表单有关。【参考方案2】:

你可以这样做:

<script>
    window.addEventListener("load", event => 
        document.getElementById('textarea-yui3').addEventListener("keydown", function (event) 
            let texLen = document.getElementById('textarea-yui3').value.length;
            let kc = event.keyCode;
            if (texLen >= 50 && (kc === 32 || (kc >= 48 && kc <= 57) || (kc >= 65 && kc <= 90)))
                event.preventDefault();
        );
    );
</script>

通过检查 keyCode,您可以让所有其他编辑器键正常工作,例如 ins、delete、backspace、f5、...

如果你是动态添加 textarea 到页面,那么你应该在将 textarea 添加到 DOM 之后添加 eventListener,而不是 pageLoad 事件。

【讨论】:

嗯,它似乎没有用。这是设置的地方。如果你去pridescrossingconfections.com/products/turtles,选择任何尺寸,选择任何选项,然后点击添加到购物车。弹出一个窗口,允许您添加消息。这是我试图限制字符的框。 如果他们粘贴? @FeliciaSantos id textarea 不同。我将更改我的代码以完成您的问题。 我知道。我只是在这里简写了 ID,所以它不是那么罗嗦。我更新了您的代码以反映实际 ID,但它仍然无法正常工作。 如果你是动态添加textarea,那么你应该在将textarea添加到DOM之后添加eventListener,而不是在pageLoad事件@FeliciaSantos【参考方案3】:

这是因为属性maxLength 接收到的是Number 而不是String,这应该可以打勾:document.getElementById("textarea-yui3").maxLength = 50;

【讨论】:

这没用,很遗憾:( 我不明白为什么这篇文章会遭到反对。他的观点是正确的,不是吗?有人吗? 不,JavaScript 会自动将字符串强制转换为数字。

以上是关于使用 Javascript 将 Textarea 的 MaxLength 设置为 50 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JavaScript 将文本插入 textarea 而不弄乱编辑历史?

使用 javascript 将文本插入 textarea 以用于 google chrome 扩展

如何仅使用 css 不使用 javascript 将 <textarea> 高度自动调整为内部文本的高度?

手动写入后无法使用 javascript 更新 textarea

如何通过 ASP.NET 中的 javascript 访问 textarea 的值?

JavaScript 将文本光标设置为input / textarea的开头/结尾