jQuery没有返回任何值

时间:2013-06-26 10:44:52

标签: javascript jquery

我有一些代码可以检查表单内容是否有效。如果我注释掉checkFile函数,checkEmpty,checkNumeric和checkEmail工作正常。但是如果我包含checkFile,它会破坏代码,导致函数不返回任何值。

这是checkFile函数。它应该检查文件扩展名。

$.fn.checkFile = function(fileValue) {

    //var fileName = contactform.cv.value;
    var extension = fileValue.substring(fileValue.lastIndexOf('.') + 1);
    alert(extension);
    if(extension === 'jpg' || extension === 'jpeg' ||extension === 'docx' ||extension === 'pdf' ||extension === 'xlsx'){
        alert("correct extension");
        return true;
    }else{
        alert("incorrect extension");
        return false;
    }

};

此功能也应该正常工作。我单独试了一下,看看它是否能正常扩展。

以下是需要的整个代码

$(window).load(function() { 


// validations
$.fn.checkEmpty = function(emp) {

    if(emp === ""){
        alert("field is empty");
        return false;
    }else{
        alert("not empty");
        return true;
    }
};

$.fn.checkEmail = function(email) {

var regex = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);

    if(regex.test(email)){
        alert("mail is valid");
        return true;
    } else {
        alert("mail is invalid");
        return false;
    }
};

$.fn.checkNumeric = function(value) {

    // 10 digits for phone number ?
    /*
    if (value.length !== 10 || value === "" || !$.isNumeric(value)) {
        alert("not a numerical value");
    } else {
        alert("numerical value");
    }*/

    var regex =new RegExp(/^(?:\d*\,\d*|\d+)$/);

    if(regex.test(value) && value!==""){
        alert("numerical value");
        return true;
    } else {
        alert("not numerical value");
        return false;
    }

};

$.fn.checkFile = function(fileValue) {

    //var fileName = contactform.cv.value;
    var extension = fileValue.substring(fileValue.lastIndexOf('.') + 1);
    alert(extension);
    if(extension === 'jpg' || extension === 'jpeg' ||extension === 'docx' ||extension === 'pdf' ||extension === 'xlsx'){
        alert("correct extension");
        return true;
    }else{
        alert("incorrect extension");
        return false;
    }

};

$.fn.checkField = function() {

    var empty = "empty";
    var numeric = "numeric";
    var email = "email";
    var file = "file";
    var flag=0;
    var retval;

    $("input:text").each(function() {

        var required = $(this).data("reqs");

        if(required.toLowerCase().indexOf(empty) !== -1){
            retval = $(this).checkEmpty($(this).val());
            if(retval === false){
                flag++;
                $(this).after('<span style="color:red">*</span>');
            }
        }
        if (required.toLowerCase().indexOf(numeric) !== -1){
            retval = $(this).checkNumeric($(this).val());
            if(retval === false){
                flag++;
                $(this).after('<span style="color:red">*</span>');
            }
        }
        if(required.toLowerCase().indexOf(email) !== -1){
            retval = $(this).checkEmail($(this).val());
            if(retval === false){
                flag++;
                $(this).after('<span style="color:red">*</span>');
            }
        }
    });
    $("input:file").each(function() {
        if(required.toLowerCase().indexOf(file) !== -1){
            retval = $(this).checkFile($(this).val());
            if(retval === false){
                flag++;
                $(this).after('<span style="color:red">*</span>');
            }
        }

    });

    alert(flag);
    return (flag > 0) ? false : true;

};
});

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

正如Bergi指出的那样,如果你将文件名作为参数传递给原型,那么将函数添加到原型中没有多大意义......

但是,如果您在方法中实际使用this,则将其添加到原型中可能是一个好主意:

$.fn.checkFile = function(){
    var filename = $(this).val();
    if (/(?:jpe?g|docx|pdf|xlsx)$/.test(filename)){
        return true;
    }else{
        return false;
    }
};

您可以在http://jsfiddle.net/NVvzN/测试此方法。尝试从计算机中选择不同的文件,看看它是如何工作的。


PS:我的猜测是,如果你接受.docx和.xlsx,你也应该接受.doc和.xls;在这种情况下,正则表达式将是/(?:jpe?g|docx?|pdf|xlsx?)$/