添加新输入后不工作类.numeric。我该怎么办?

时间:2011-08-10 20:08:56

标签: javascript jquery

为什么在添加新输入后,js代码中的类.numeric(正常数字格式化)无效?

normal number formatting这种方式是对的吗? 你的建议是什么? 我不想使用插件。

DEMO

$("input:text.numeric").keyup(function () {
    $val = $(this).val().match(/[0-9]/g).reverse().join("").match(/[0-9]{1,3}/g).join(",").match(/./g).reverse().join("");
    $(this).val($val)
})

尊重

3 个答案:

答案 0 :(得分:1)

如果在完成加载后向页面添加内容,则需要在脚本上使用live()函数使它们处理新数据。

如果您执行以下操作:

$('#container').append('<div class="clickme">The text goes here</div>');

$('#container').load('script.php');

......他们都被认为是在加入页面。


使用live(),您的代码将成为:

$("input:text.numeric").live('keyup', function () {
    $val = $(this).val().match(/[0-9]/g).reverse().join("").match(/[0-9]{1,3}/g).join(",").match(/./g).reverse().join("");
    $(this).val($val)
});

在此处阅读更多内容:http://api.jquery.com/live/

答案 1 :(得分:1)

您需要一个面向未来的事件观察员。由于keyup绑定已分配给现有节点,因此您之后创建的任何节点都不会绑定到该事件。您需要使用livedelegate

更改

$("input:text.numeric").keyup(function () {

$("input:text.numeric").live('keyup',function () {

$('.find_input').delegate('input:text.numeric','keyup',function () {

delegate()live()更加资源友好,但您需要提前了解父母。在你的例子中,我推荐它。

工作演示:http://jsfiddle.net/AlienWebguy/zgWr3/4/

答案 2 :(得分:0)

使用delegate()[docs]方法将处理程序绑定到.column容器。

示例: http://jsfiddle.net/zgWr3/3/

$('.column').delegate("input.numeric:text",'keyup',function () {
    $val = $(this).val().match(/[0-9]/g).reverse().join("").match(/[0-9]{1,3}/g).join(",").match(/./g).reverse().join("");
    $(this).val($val)
});

这样,"input.numeric:text"内的任何.column元素都会调用处理程序,而不管它们何时被添加到DOM中。

我也稍微改变了选择器。似乎对我来说更容易理解。