以编程方式更改文本大小是阻止更改事件

时间:2013-04-17 10:38:35

标签: 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事件。它是否正确?任何解决方法?我无法在第一个函数上显式触发Change事件,因为我们会创建不必要的更改。

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

1 个答案:

答案 0 :(得分:-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更改文档,您可以找到: “更改事件在其值发生变化时发送给元素。此事件仅限于元素,框和元素。对于选择框,复选框和单选按钮,当用户进行选择时,会立即触发事件。鼠标,但对于其他元素类型,事件将延迟,直到元素失去焦点。

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