在Jquery中第二次阻止Keyup事件

时间:2012-03-29 10:13:15

标签: jquery textbox replication keyup

我有[标题,名称,关键字,描述和网址]输入的5个文本框

$("#TxtPageTitle").keyup(function () {
  $("#TxtPageName").val($(this).val());
  $("#TxtPageKeywords").val($(this).val());
  $("#TxtPageDescription").val($(this).val());
  $("#TxtPageURL").val($(this).val());
});

我正在使用JQuery的Keyup事件来处理复制,当我在Title(文本框)中输入内容时,它将被填充所有其他4个文本框。

问题是:我首先在标题(文本框)中输入内容,然后填入所有其他文本框,稍后我将编辑所有4个文本框的值。再次,如果更改值Title(文本框),则将更改所有其他4个文本框的旧值。

我想要的是Keyup方法应该只适用于第一次输入。所以我可以防止这个问题。

3 个答案:

答案 0 :(得分:4)

一种方法是给你想要自动填充特定类的字段,例如“autoFill”,然后在修改它们时从各个字段中删除该类,例如:

$("#TxtPageTitle").keyup(function () {
    $(".autoFill").val(this.value);
});

$(".autoFill").change(function() {
    $(this).removeClass("autoFill");
});​​​​​​​​

演示:http://jsfiddle.net/A2FsY/

你说“在第一次进入”时,但我建议的更好一点,因为它会继续将#TxtPageTitle的更改应用到尚未单独编辑的任何其他字段。如果你真的希望它是“第一次进入”,那么根据Blade0rz的答案,将#{1}}或.blur()处理程序添加到#TxtPageTitle。

编辑:请注意,不需要在不再具有“autoFill”类的字段上继续触发change事件,因此上面的更改处理程序的主体可以更改为:

.change()

答案 1 :(得分:2)

每次在文本框中键入1个字符时,都会触发keyup事件。没有办法告诉第一次编辑有多少字符。您可以为文本框中的字符数决定固定值,之后键盘事件将被取消绑定,或者为用户添加命令以“告诉”他何时停止键入,然后取消绑定事件。要取消绑定事件,请参阅:jQuery unbind

答案 2 :(得分:0)

当页面标题文本框失去焦点时,您可以取消绑定键盘处理程序。这通常表明用户已完成:

$("#TxtPageTitle").keyup(function () {
  $("#TxtPageName").val($(this).val());
  $("#TxtPageKeywords").val($(this).val());
  $("#TxtPageDescription").val($(this).val());
  $("#TxtPageURL").val($(this).val());
}).blur(function() {
  $(this).unbind("keyup");
});