繁体   English   中英

单击后运行一些js代码的问题

[英]problem in run some js codes after click

为什么搜索后,点击搜索结果,点击加号(按钮添加输入)在本例中的部分添加输入 ,日期格式化( $('.find_input').delegate('input.date:text', 'keyup', .... )和常规数字格式设置( $('.find_input').delegate('input.numeric:text','keyup',... )不起作用。

示例: http//www.binboy.gigfa.com/admin/tour_foreign/insert_foreign

js完整代码: http : //jsfiddle.net/ZpDDR/

...
///// Date formating /////////////////////////////////////////////////////////////////////////////////////////
    $dateSet = 0;
    $monthSet = 0;
    $yearSet = 0;

    $('.find_input').delegate('input.date:text', 'keyup', function () {
        $val = $(this).val().replace(/[^\d]+/g, "").match(/\d{1,12}$/);
        if($val == null) {
            return;
        } else {
            $val = $val.join("");
        }

        if($(this).val().match(/\d{4,}$/) && $val.length%2 == 0) {
            $val = $val.match(/\d{2}/g);
            if($yearSet < $monthSet) {
                if($val.length == 4) {
                    $(this).val($val.join("").replace(/(\d{2})(\d{2})(\d{4})$/,'$3/$1/$2'));
                    $yearSet++;
                } else if($val.length == 6){

                    $(this).val($val.join("").replace(/(\d{4})(\d{2})(\d{2})(\d{4})$/,'$4/$2/$3'));
                    $yearSet++;
                }
            } else {
                if($monthSet < $dateSet) {
                    $(this).val($val.join("").replace(/(\d{4})(\d{2})(\d{2})(\d{2})$/,'$1/$4/$3'));
                    $monthSet++;
                } else {

                    if($val.length == 2) {
                           $(this).val($val.reverse().join("/"));
                        $dateSet++;
                        $monthSet++;
                    } else {
                           $(this).val($val.join("").replace(/(\d{4})(\d{2})(\d{2})(\d{2})$/,'$1/$2/$4'));
                        $dateSet++;
                    }
                }
            }
        }
    });

///normal number formatting/////////////////////////////////////////////////////////////////////////////////////////    
    $('.find_input').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)
    });

问题在于,当您设置委托函数时,要委托的元素.find_input尚不存在。 delegate允许为尚未创建的元素定义事件处理程序,但仅定义与第二个选择器匹配的元素,例如$('#must-exist-now').delegate('.can-be-created-later', ...);

我不确定我的描述是否很好,但是解决方案是将您的语句更改为从DOM加载中已存在的内容委托。 例如: $(document).delegate('input.date:text', ...)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM