在动态HTML上添加Keypress/keydown事件

21 浏览
0 Comments

在动态HTML上添加Keypress/keydown事件

我在项目中有以下的动态输入html代码:

$(this).html("");

现在我想要为上述输入文本框添加只能输入数字的验证,但是由于对jquery不熟悉,我想知道如何添加keypress事件。

希望使用以下验证方法:

function isNumber(evt) {
    evt = (evt) ? evt : window.event;
    var charCode = (evt.which) ? evt.which : evt.keyCode;
    if (charCode > 31 && (charCode < 48 || charCode > 57)) {
        return false;
    }
    return true;
}

我尝试了以下代码,但似乎不起作用:

$(this).html("");

编辑:

还有其他方法可以添加只能输入数字的验证吗?

0
0 Comments

问题的原因是在动态生成的HTML元素上添加keypress/keydown事件时,使用了type="number"属性。然而,这个属性在Internet Explorer 9及更早的版本中不被支持。

解决方法是使用其他能够兼容所有浏览器的方式来实现相同的功能。可以使用元素,并通过JavaScript代码来限制只能输入数字。

以下是一种可能的解决方法:

$(this).html("");
$(this).find("input").keypress(function(event) {
  var charCode = (event.which) ? event.which : event.keyCode;
  if (charCode > 31 && (charCode < 48 || charCode > 57)) {
    return false;
  }
  return true;
});

这段代码将动态生成一个文本输入框,并将原来的值作为默认值。然后,通过使用keypress事件和键盘码来限制只能输入数字。如果输入的字符不是数字,就返回false,阻止字符的输入。

通过这种方式,无论是在哪个浏览器上,都可以实现类似type="number"的功能,并能够正确处理用户的输入。

0
0 Comments

问题的原因是当点击文本框时,点击事件会冒泡到父元素,触发替换文本框的处理程序。解决方法是在文本框的onclick事件中调用event对象的stopPropagation()方法来阻止事件冒泡。以下是示例代码:

$("#container").click(function () {
  $(this).html("");
});
function isNumber(evt) {
  evt = (evt) ? evt : window.event;
  var charCode = (evt.which) ? evt.which : evt.keyCode;
  if (charCode > 31 && (charCode < 48 || charCode > 57)) {
    return false;
  }
  return true;
}

以上代码中,当点击id为"container"的元素时,会将其内容替换为一个带有onkeypress和onclick事件的文本框。其中onclick事件调用了event.stopPropagation()方法来阻止事件冒泡。isNumber函数用于判断输入的字符是否为数字。

希望以上代码能够解决你的问题。如果还有其他问题,请参考这个链接

0
0 Comments

使用事件委托

$(document).on("keypress","input[type=text]",isNumber);
// $(document) 使用最近的父元素进行事件委托

事件委托允许我们将一个事件监听器附加到一个父元素上,该监听器将会对所有与指定选择器匹配的后代元素触发,无论这些后代元素现在存在还是将来添加。

0