jquery - 以编程方式更改文本大小会阻止更改事件

标签 jquery

我们有一个文本框,用户应该在其中输入一些数据。但是,该数据不得超过 500 个字符。为了实现这一点,我们实现了在 KeyUp 事件上调用的以下函数:

        function keyupMaxLimit(obj, maxlen) {
            if (parseInt(obj.value.length) > maxlen) {
                $(obj).val($(obj).val().substr(0,maxlen));
            }
        }

这有效:用户无法输入更多内容。 我们还有一个与同一文本框的 Change 事件关联的函数,以便检测更改并发挥我们的魔力。

    $(document).on("change", "#myTextBox", function () {
        //magic here
    });

这也有效:当用户更改文本时,将调用该函数。

但是,这是我们的问题,这两个函数不能一起工作。例如,如果用户引入了更多他/她应该引入的字符,第一个函数将修剪文本,但第二个函数将不会被调用!

看来我们对第一个函数的文本框所做的更改正在阻止/清除更改事件。它是否正确?有什么解决办法吗?我无法在第一个函数上显式触发 Change 事件,因为我们会创建不必要的更改。

编辑 - 您可以在这里看到这种情况发生:http://jsfiddle.net/jpaires/dpujx/ 打开浏览器的控制台并在文本框中写入“12345”。该事件将被触发(控制台上显示“a-ok”)。但是,如果您写入“123456”,文本将被剪切并且事件将不会被触发(控制台上不会出现“a-ok”)。谢谢尤哈娜:)

最佳答案

我应该尝试限制 html 输入中的字符数,如下所示:

<input type="text" id="Textbox" name="Textbox" maxlength="500" />

另一件事是,如果您想在文本输入更改时执行某些操作,我认为在这种情况下您也可以在输入上使用 keyup 事件,如下所示:

$(document).on("keyup", "#myTextBox", function () {
 //SOMETHING
});

我用我的建议更新了这个 fiddle ,它有效...... http://jsfiddle.net/BdqDB/

通过这种方式,您始终会触发日志并且文本受到限制。

另一个解决方案是: 如果你想继续使用你的功能来剪切文本,我会这样做:

$(document).on("keyup", "#myTextBox", function () {
  keyupMaxLimit(this,5);
  console.log('other stuff');
});

请参阅 http://jsfiddle.net/wTQa4/1/ 上的此操作

如果您检查 jquery 更改文档,您可以找到: “当元素的值发生变化时,change 事件会发送到元素。此事件仅限于元素、框和元素。对于选择框、复选框和单选按钮,当用户使用以下选项进行选择时,会立即触发该事件鼠标,但对于其他元素类型,事件将被推迟,直到元素失去焦点。

所以我认为这个问题的答案是,你不会通过变更事件得到你想要的东西,我给了你问题的解决方案,但你没有发送反馈...... 您不应该做的另一件事是内联调用 js 方法,一旦您使用 jQuery,将事件绑定(bind)到元素非常容易,并且它是不引人注目的 javascript,是编写 js 的最佳实践。

关于jquery - 以编程方式更改文本大小会阻止更改事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16057852/

相关文章:

javascript - 使用 php 和 ajax 生成和下载 CSV 文件

javascript - 如何伪造浏览器大小调整 1px 并将其恢复到原来的样子?

javascript - 没有 jQuery 的 .html() 和 .append()

javascript - 页面刷新时提交后如何滚动并且PHP将标签颜色设置为红色到带有ID表单的div?

java - 更新后未调用 Jquery 事件

javascript - 加载缓慢的div死空间

javascript - 为什么我会得到这个 JavaScript ReferenceError

javascript - 如何在 Sharepoint 2013 中获取 oauth 访问 token ?

javascript - 如何制作显示相同数据的两个输入字段?

javascript - 文本淡入淡出jquery