1

我有一些代码可以检查表单的内容是否有效。如果我注释掉 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;

};
});

谢谢你的帮助。

4

1 回答 1

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?)$/

于 2013-06-26T11:08:25.613 回答