繁体   English   中英

结合2个Javascript / Jquery脚本

[英]Combining 2 Javascript/Jquery scripts

我有问题,我需要将2个脚本组合在一起。 其中一个是验证,另一个是变量/ ajax脚本。 我试过了,但是我无法使它工作。 我将其放在脚本下面的区域中,该脚本检查它是否附加了Needfilled元素,但是在提交时不执行ajax调用。

脚本1:

$(document).ready(function(){
 $("#loading").hide();

// Place ID's of all required fields here.
required = ["parentFirstName", "parentLastName", "parentEmailOne", "parentZip"];
// If using an ID other than #email or #error then replace it here
email = $("#parentEmailOne");

errornotice = $("#error");
// The text to show up within a field when it is incorrect
emptyerror = "Please fill out this field.";
emailerror = "Please enter a valid e-mail.";




$("#theform").submit(function(){    
    //Validate required fields


    for (i=0;i<required.length;i++) {
        var input = $('#'+required[i]);
        if ((input.val() == "") || (input.val() == emptyerror)) {
            input.addClass("needsfilled");
            input.val(emptyerror);
            errornotice.fadeIn(750);
        } else {
            input.removeClass("needsfilled");


        }
    }
    // Validate the e-mail.
    if (!/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test(email.val())) {
        email.addClass("needsfilled");
        email.val(emailerror);
    }

    //if any inputs on the page have the class 'needsfilled' the form will not submit
    if ($(":input").hasClass("needsfilled")) {
        return false;
    } else {
        errornotice.hide(); 
        return true;
    }
});


// Clears any fields in the form when the user clicks on them
$(":input").focus(function(){       
   if ($(this).hasClass("needsfilled") ) {
        $(this).val("");
        $(this).removeClass("needsfilled");
   }


});
}); 

脚本2:

// Form Varables
var parentFirstNameVal = $("#parentFirstName").val();
var parentLastNameVal = $("#parentLastName").val();
var emailaddressVal = $("#parentEmailOne").val();
var parentPhoneVal = $("#parentPhone").val();
var parentAddressVal = $("#parentAddress").val();
var parentAddressContVal = $("#parentAddressCont").val();
var parentCityVal = $("#parentCity").val();
var parentStateVal = $("#parentState").val();
var parentZipVal = $("#parentZip").val();   
var parentListenVal = $("#parentListen").val();     
var codeVal = $("#code").val();     
var getUpdateVal = $("#getUpdate").val();       

            input.removeClass("needsfilled");
            $("#message-space").html('<br /><br /><span class="greenText">Connected to Facebook.</span><br />');
            $("#loading").show();


            var counter = 0,
                divs = $('#div1, #div2, #div3, #div4');

            function showDiv () {
                divs.hide() 
                    .filter(function (index) { return index == counter % 3; }) 
                    .show('fast'); 

                counter++;
            }; 

            showDiv();

            setInterval(function () {
                showDiv();
            }, 10 * 600); 

            alert(parentFirstNameVal);

            $.ajax({
                type: "POST",
                url: "includes/programs/updateEmailsTwo.php",
                data: "parentFirstName="+parentFirstNameVal+"&parentLastName="+parentLastNameVal+"&UserEmail="+emailaddressVal+"&parentPhone="+parentPhoneVal+"&parentAddress="+parentAddressVal+"&parentAddressCont="+parentAddressContVal+"&parentCity="+parentCityVal+"&parentState="+parentStateVal+"&parentZip="+parentZipVal+"&parentListen="+parentListenVal+"&code="+codeVal+"&getUpdate="+getUpdateVal+"&ref=<?php echo $_SESSION["refid"]; ?>",
                success: function(data){
                $("#message-space").html('<br /><br /><span class="greenText">Complete</span><br />');
                divs.hide() 

        }
     });

脚本2中的代码需要放在脚本1中,我在下面用注释标记了该脚本; 如果脚本2中的代码正在通过ajax调用提交表单,那么如果未发现错误,则不需要返回true,这样做可以使表单正常提交。

if ($(":input").hasClass("needsfilled")) {
    return false;
} else {
    errornotice.hide(); 

    // SCRIPT 2 CODE HERE BEFORE THE RETURN

    // If the ajax call in script 2 is submitting your form via ajax then change
    // the line below to return false so your form doesn't submit
    return true;
}

除了@JeffWilbert提供的建议之外,我还将在后面跟一些其他建议,以使您的代码更加简洁和有效。

首先,就像您在脚本1中所做的一样(您具有一个字段名数组),您可以对脚本2进行相同的操作。下面是一个示例,可以使您的代码更具可读性。

var fields = ['parentFirstName', 'parentLastName', 'parentEmailOne', 'parentPhone'];
var fieldsValue = [], dataString;

for(i = 0; i < fields.length; i++){
     fieldsValue.push(fields[i] + "Val=" + $('#' + fields[i]).val());
}

dataString = fieldsValue.join("&");

其次,如果脚本2不依赖于从脚本1声明的任何变量,那么我会将脚本2转换为它自己的函数,然后从脚本1调用它。我认为将所有这些代码添加到Jeff所建议的其他方法中并不是最好的。

function Script2(){
     //Script 2 Code
}

$("#theform").submit(function(){   
     //Call Script 2
});

第三,如果要通过AJAX而不是通过其默认方法提交表单,我建议使用.preventDefault,然后在事件处理函数中处理提交流程。

$("#theform").submit(function(e){   
     e.preventDefault();
     //rest of your code here.
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM