5

我们有一个文本框,用户应该在其中输入一些数据。但是,该数据不得超过 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 事件。这个对吗?任何解决方法?我无法在第一个函数上显式触发 Change 事件,因为我们会创建不必要的更改。

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

4

1 回答 1

-3

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

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

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

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

我用我的建议更新了这个小提琴,它可以工作...... http://jsfiddle.net/BdqDB/

通过这种方式,您始终会触发日志并且文本是有限的。

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

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

在http://jsfiddle.net/wTQa4/1/上看到这个工作

如果查看 jquery 更改文档,您会发现:“ change 事件在其值更改时发送到元素。此事件仅限于元素、框和元素。对于选择框、复选框和单选按钮,该事件会立即触发当用户使用鼠标进行选择时,但对于其他元素类型,事件会延迟到元素失去焦点。 "

所以我认为这个问题的答案是,你不会通过 change 事件得到你想要的,我给了你一个解决你的问题的方法,但你没有发送反馈......你不应该做的其他事情是内联调用 js 方法,一旦你使用 jQuery,将事件绑定到元素非常容易,而且它是不显眼的 javascript,是编写 js 的最佳实践。

于 2013-04-17T10:45:43.963 回答