使用 Prototype 事件观察器防止用户在文本区域中写入超过 N 个字符

2024-02-05

我知道可以模仿maxlength财产来自input上的元素textarea通过使用这个技巧:

<textarea rows="5" cols="30" onkeydown="return checkLength(this)"></textarea>

<script type="text/javascript">
var maxLength = 30;

function checkLength(elem) {
  if (elem.value.length == maxLength) {
    return false;
  }
  return true;
}
</script>

通过使用 checkLenght 的返回值作为onkeydown事件,我能够有效地防止用户写入超出配置的限制,因为事件链将在输入的字母出现之前被破坏。

我已经使用 Prototype 的事件观察器尝试了相同的技术,但它不起作用。这是我尝试过的简化版本:

<textarea rows="5" cols="30" id="myTextArea"></textarea>

<script type="text/javascript">
var maxLength = 30;

function checkLength() {
  if ($('myTextArea').value.length == maxLength)) {
    return false;
  }
  return true;
}

document.observe('dom:loaded',function(){
  $('myTextArea').observe('keydown',checkLength);
});
</script>

显然,这行不通,因为我无法通过返回 false 来破坏事件链(并且Event.stop()只会阻止此事件冒泡,而不会完全停止执行)。

我通过检查文本区域的长度解决了这个问题onkeyup事件并在超出限制时修剪其值;但它不一样,因为用户会看到文本出现和消失。

有没有办法达到相同的结果?


考虑其他答案和评论。最好进行事后验证,然后不要接受该帖子。

尽管如此,以下应该可以工作(在 FF 和 IE 中可以,在 Opera 中不行。懒得去检查为什么)

<textarea rows="5" cols="30" id="myTextArea"></textarea>
<script type="text/javascript">
    var maxLength = 30;
    Event.observe('myTextArea', 'keydown', function (event) {
        if ($('myTextArea').value.length == maxLength) {
            Event.stop(event);
            return false;
        }
    });
</script>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Prototype 事件观察器防止用户在文本区域中写入超过 N 个字符 的相关文章

随机推荐

  • 如何在 Pillow-Python 中使用流打开简单图像

    from PIL import Image image Image open image jpg file path io BytesIO image save file path JPEG image2 Image open file p
  • WCF 证书身份验证不起作用

    我已经构建了 WCF helloworld 客户端和服务器 我想在它们之间使用证书身份验证 我收到的错误是 调用者未经服务验证 我使用 makecert exe 创建了两个证书 客户端上的证书安装在 个人 受信任的人 和 第三方根证书颁发机
  • 如何使用 Azure Function 中的 Azure 托管身份通过触发器访问服务总线?

    我在 Azure 中创建了一个 ServiceBus 命名空间 以及一个主题和订阅 我还有一个简单的 Azure 版本 1 函数 可以触发 ServiceBus 中收到的主题 如下所示 FunctionName MyServiceBusTr
  • Django自定义注解功能

    我想使用 Django 构建一个简单的热门问题列表 我有一个function https web archive org web 20150526231733 http amix dk blog post 19588评估 hotness 每
  • 简单的C程序

    该程序基于K R中输入 输出部分的程序 include
  • 输入字符时无限循环[重复]

    这个问题在这里已经有答案了 我试图限制用户仅输入 1 或 2 int ch do cout lt lt Enter n cin gt gt ch switch ch case 1 cout lt lt 1 break case 2 cout
  • 在后台加载 MKMapView 并从中创建 UIImage (iPhone 和 iPad)

    我遇到一种情况 我需要一种加载具有多个覆盖层的 MKMapView 的方法 此地图视图不应显示在屏幕上 我需要加载它的唯一原因是为了从地图创建图像以供在其他地方使用 我在网上查了一下 但没有找到解决问题的方法 请问有人可以帮我吗 这是我到目
  • 如何确保队友不会通过重写历史来搞砸 git 存储库?

    常见的建议似乎是不要在提交提交后重新设置基准 重置或执行其他 历史重写 操作 建议在您自己的机器上执行所有这些类型的切片和切块 但一旦您推送了它 就顺其自然 这是有道理的 但如何执行这项政策呢 对于多个开发人员 我们如何确保没有人这样做 似
  • 仅在调试构建变体中包含 Stetho

    我知道我可以使用debugCompile只拉入一个dependency为了debug build 有没有一种好的 简化的方法来做到这一点code initialization这也是必需的吗 如果没有依赖项 其他变体将无法编译 检查 Tani
  • 如何使用 PHP 混淆 JavaScript? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 例如 我如何混淆以下示例代码 The code below will write to a heading and to a paragr
  • TIdCmdTCPServer 和 TIdCmdTCPClient 应该一起使用吗?

    我正在尝试编写一个服务器和一组与服务器通信的客户端 服务器将维护不同客户端的状态 并允许它们在状态发生变化时向中央服务器发出警报 专业客户端将允许控制其他连接的客户端 我将服务器作为 TIdCmdTCPServer 客户端 目前 使用 TI
  • Kronecker 产品 pandas 数据框

    我有两个数据框 A B 0 1 2 1 1 2 2 1 2 and C D 0 1 4 1 2 5 2 3 6 我需要叉积 AC AD BC BD 的平均值 因此我希望能够计算 AC AD BC BD 0 1 4 2 8 1 2 5 4 1
  • Sinon.js-试图监视 console.log 但它已经被包装了

    我是编写节点测试的新手 这是我尝试编写的 gulp 插件的第一个单元测试 var chai require chai var spy require chai spies var es require event stream var Fi
  • 对推力从当前速度矢量到目标矢量的平滑变化进行编程

    TL dr 我不确定如何计算一个矢量与另一个矢量之间的推力的平滑过渡 我正在编写一个简单的游戏 敌人在开放空间 没有墙壁 中追赶玩家 我独立计算敌人的 x 和 y 速度 如果敌人朝着玩家的方向前进 则加速它们 如果敌人走错路 则快速减慢它们
  • MomentJS - 将日期时间从 UTC 转换为不同的时区

    我正在尝试将 utc 时间转换为本地时区 但没有成功 这是我的代码 var utc moment tz 2017 03 28 15 00 00 UTC var s utc format var pl moment tz utc format
  • GAE/J:开发和生产环境

    GAE J 开发环境和生产环境之间的主要区别是什么 生产时应复检哪些内容 我应该期待什么样的数据存储差异 开发环境是单线程的 无请求超时 No 爆炸指数 http code google com appengine docs python
  • 根据网络变化更新 iPhone 的可达性

    编辑 23 5 11 我现在想知道我是否过度设计了这个 当我使用在线连接时 我会正确处理它 要么 在后台显示进度或活动指示器 如果失败 我会显示一条合适的消息或 我调用另一个应用程序 Safari 或 Maps 然后它会进行自己的检查 如果
  • “从选择中查找标签”在带标签的 pdf 中不起作用?

    我已经使用 pdfbox 标记了 pdf 我是如何被标记的 我不是提取文本和标记 而是将 mcid 添加到现有内容流 打开和关闭 ex p gt BDC EMC 然后添加标记内容为文件根目录结构 工作原理 几乎一切都工作正常 就像完全标记的
  • python (django) hashlib 与 Nodejs 加密

    我正在将 Django 站点移植到 Node js 并尝试在 Node 中重新实现 Django 设置密码方法 这是 Django 代码 from django utils crypto import pbkdf2 get random s
  • 使用 Prototype 事件观察器防止用户在文本区域中写入超过 N 个字符

    我知道可以模仿maxlength财产来自input上的元素textarea通过使用这个技巧