可以在页面加载而不是onkeyup上运行javascript函数吗?

时间:2009-09-03 23:30:18

标签: jquery

我有下面这个使用jquery的javascript代码,它被认为是一个密码强度计类型的东西。

有一个包含3个项目的html列表。弱,中,强,当您在密码表单输入中键入密码时,它将更改列表项的类/颜色。

这主要是为了好玩,但我想让它在我的页面上工作得更好,当你输入时它会起作用但是如果有错误并且用户被重定向回我的注册表单,我有密码预先填写了他们已输入的密码,如果填写的密码已经以某种方式包含文本,我想让这个脚本工作,只是看着这看起来好像很容易添加?

而不是检查密钥,它需要像页面加载一样检查那部分是否可能?

<script>
$.fn.passwordStrength = function( options ){
    return this.each(function(){
        var that = this;that.opts = {};
        that.opts = $.extend({}, $.fn.passwordStrength.defaults, options);
        that.div = $(that.opts.targetDiv);
        that.defaultClass = that.div.attr('class');
        that.percents = (that.opts.classes.length) ? 75 / that.opts.classes.length : 75;
        v = $(this)
        .keyup(function(){
            if( typeof el == "undefined" )
            this.el = $(this);
            var s = getPasswordStrength (this.value);
            var p = this.percents;
            var t = Math.floor( s / p );
            if( 75 <= s )
            t = this.opts.classes.length - 1;
            this.div
            .removeAttr('class')
            .addClass( this.defaultClass )
            .addClass( this.opts.classes[ t ] );
        })
    });

    function getPasswordStrength(H){
        var D=(H.length);
        // Added below to make all passwords less than 4 characters show as weak
        if (D<4) { D=0 }
        if(D>5){
            D=5
        }
        var F=H.replace(/[0-9]/g,"");
        var G=(H.length-F.length);
        if(G>3){G=3}
        var A=H.replace(/\W/g,"");
        var C=(H.length-A.length);
        if(C>3){C=3}
        var B=H.replace(/[A-Z]/g,"");
        var I=(H.length-B.length);
        if(I>3){I=3}
        var E=((D*10)-20)+(G*10)+(C*15)+(I*10);
        if(E<0){E=0}
        if(E>75){E=75}
        return E
    }
};

//then on the page we call it like this

$(document).ready(function() {
    $('input[name="password"]').passwordStrength({targetDiv: '#iSM',classes : Array('weak','medium','strong')});
});
</script>

4 个答案:

答案 0 :(得分:3)

您可以通过触发附加到的事件来强制调用该函数,在本例中为keyup。将脚本底部更改为:

$(document).ready(function() {
    $('input[name="password"]').passwordStrength({targetDiv: '#iSM',classes : Array('weak','medium','strong')});
    $('input[name="password"]').trigger('keyup');
});

答案 1 :(得分:1)

如果我理解正确,你想调用你在页面加载时附加到keyup事件的匿名函数。

你有两个选择,你可以让这个函数不再是匿名的并且明确地调用它,或者你可以通过调用.keyup()(没有参数)来触发keyup事件处理程序。

类似的东西:

$(document).ready(function() {
    $('input[name="password"]').passwordStrength({targetDiv: '#iSM',classes : Array('weak','medium','strong')});
    $('input[name="password"]').keyup();
});

答案 2 :(得分:0)

您可以使用:

$(document).ready( //your function );

答案 3 :(得分:0)

如果填写了密码框,则触发keyup事件:

$(document).ready(function() {
    var pwd = $('input[name="password"]')
    pwd.passwordStrength( ... );

    if(pwd.val().length > 0) { pwd.trigger('keyup'); }
});

不确定这会按原样运作,但你明白了......