在页面重新加载时检索dom上的元素值

时间:2009-11-13 15:52:19

标签: javascript jquery

我有以下JavaScript函数,用于防止用户使用Ajax请求淹没我们的服务器:

var validateZip = function () {

    var lastSuccessful = parseInt(jQuery('#mailingZip').val(), 10);

    return {
        validate: function(zip) {
            var is5DigitNumber = /^\d{5}$/;
            if (is5DigitNumber.test(zip) && lastSuccessful !== zip) {
                lastSuccessful = zip;
                return true;
            } else {
                return false;
            }
        }
}();

如果用户输入了错误的邮政编码或其他错误出现在表单上,​​则会重新加载此页面。然而,由于dom还没有加载,我总是从那个领域拉NaN。

将它放在准备好jQuery的on文档中意味着我无法直接调用该函数。

我如何修改我的范围,以便lastSuccessful保持“私有”并在dom准备好后获取值?

3 个答案:

答案 0 :(得分:1)

function validateZip() { // use function declaration, not function expression

    var lastSuccessful = parseInt(jQuery('#mailingZip').val(), 10);

    return {
        validate: function(zip) {
            var is5DigitNumber = /^\d{5}$/;
            if (is5DigitNumber.test(zip) && lastSuccessful !== zip) {
                lastSuccessful = zip;
                return true;
            } else {
                return false;
            }
        }
}; // removed premature invocation of function

jQuery(validateZip); // call it on document ready instead

答案 1 :(得分:0)

为什么不能在准备好的事件中调用它? 当然你可以将它包含在另一个函数中:

$(functon(){

    var validateZip = function () {

        var lastSuccessful = parseInt(jQuery('#mailingZip').val(), 10);

        return {
            validate: function(zip) {
                var is5DigitNumber = /^\d{5}$/;
                if (is5DigitNumber.test(zip) && lastSuccessful !== zip) {
                    lastSuccessful = zip;
                    return true;
                } else {
                    return false;
                }
            }
    }();

});

问题是你需要将validateZip函数保持为定义的全局吗?如果你现在只运行它,只需省略它的声明,然后写:

$(functon(){

    (function () {

        var lastSuccessful = parseInt(jQuery('#mailingZip').val(), 10);

        return {
            validate: function(zip) {
                var is5DigitNumber = /^\d{5}$/;
                if (is5DigitNumber.test(zip) && lastSuccessful !== zip) {
                    lastSuccessful = zip;
                    return true;
                } else {
                    return false;
                }
            }
    })();

});

答案 2 :(得分:0)

不知道为什么我之前没想过/做过这件事。我在返回函数上创建了一个getter / setter,然后在文档就绪,只是调用了具有该值的setter。

var validateZip = function(){

// Track the last sent in zip code -- treat this as private data
var lastSuccessful = "";

return {
    validate : function(zip) {
        var is5DigitNumber = /^\d{5}$/;
        if (is5DigitNumber.test(zip) && lastSuccessful !== zip) {
            lastSuccessful = zip;
            return true;
        } else {
            return false;
        }
    },

    setLastSuccessful : function(zip) {
        lastSuccessful = zip;
    },

    getLastSuccessful : function() {
        return lastSuccessful;
    }
}

}();

jQuery(document).ready(function(){     validateZip.setLastSuccessful(jQuery的( '#mailingZip')VAL()); });