我有以下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准备好后获取值?
答案 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()); });