Javascript / AJAX - OnSubmit не работает - PullRequest
0 голосов
/ 03 марта 2011

Вот что у меня есть:

<form name="myts" method="post" action="ts.php" enctype="multipart/form-data" onsubmit="return upuInit(this)"> 
. 
. 
...bunch of inputs/buttons etc... 
. 
. 
<input type="hidden" id="isFormValidated" name="isFormValidated" value="">
</form>

<input name="image" type="image" src="img/submit.png" border="0" onClick="validateTS(document.forms['myts']);alert('yo iam back. val: '+document.forms['myts'].value);if(document.forms['myts'].isFormValidated.value == 'true') {alert('about to submit');document.forms['myts'].submit();}">

Вот JavaScript "validateTS", который вызывает скрипт проверки PHP (AJAX).

function validateTS(oForm) {
var x = GetXmlHttpObject();
var errMsg = "";
var url = "validateTS.php?usr=TEST";
var retVal = false;

// PC Work Hours
var pcWH = getElement("txtpcwk");
var pcTH = getElement("txtpctrv");
var pcTot = parseInt(pcWH.value) + parseInt(pcTH.value);

url += "&pcHrs0="+pcTot;

// Build the URL above and include the "updated" values.
var selectBox = getElement("addlst");
var myOptions = [];
for (var loop=0; loop<selectBox.options.length; loop++) {
    myOptions[loop] = { optText:selectBox.options[loop].text, optValue:selectBox.options[loop].value };
}

for (var loop=0; loop<myOptions.length; loop++) {
    var assWH = getElement("txtasswk_"+myOptions[loop].optValue);
    var assTH = getElement("txtasstrv_"+myOptions[loop].optValue);
    var assWHTotal = parseInt(assWH.value) + parseInt(assTH.value);
    url += "&emp"+loop+"="+assWHTotal;
}

var tsApprover = getElement("txtappr").value;
var tsClientRep = getElement("txtins").value;

url += "&tsApprover="+tsApprover+"&tsClientRep="+tsClientRep;

x.open("GET",url,true);
x.onreadystatechange=function() {
    if(x.readyState == 4 && x.status == 200) {
        var r = x.responseText;
        var myUploadAlerts = "";
        var isUploadFilesValid = false;

        myUploadAlerts = validateUploadForm(oForm);
        r = r.trim();
        myUploadAlerts = myUploadAlerts.trim();
        if (r != "" || myUploadAlerts != "") {
            showMyAlerts("Please correct the following Error(s) before proceeding: <br><br>" + formatAlerts(r) + formatAlerts(myUploadAlerts), 500, block_ui_enabled);
            oForm.isFormValidated.value = "false";
        }
        else {
            oForm.isFormValidated.value = "true";   
        }
    }
};
x.send(null);

}

Теперь у меня есть 2 основных вопроса: 1) Когда я нажимаю на входное изображение (в форме), оно переходит к функции ValidateTS и проверяет форму и все без проблем. И показывает предупреждение, если есть ошибки. Но он НЕ устанавливает значение "isFormValidated" в форме ... не знаю почему ... может быть, я могу вернуть что-то еще, а не устанавливать значение формы?

2) Это дает мне больше возможностей, чем все остальное. Во всей форме у меня есть фрагмент «ЗАГРУЗИТЬ», где пользователь может загрузить что угодно. Но у меня есть только одна кнопка (кнопка изображения в форме для отправки). Поэтому, когда я нажимаю на изображение, оно сначала проверяет форму, как упомянуто в выпуске 1, а затем заканчивает «ПРЕДОСТАВЛЕНИЕ» формы. Теперь, когда я вызываю функцию отправки javascript, я предполагаю, что она выполнит функцию «ONSUBMIT» в форме ( ЭТО НЕ ВЫПОЛНЯЕТСЯ ... и форма в конечном итоге будет отправлена ​​в ts.php ).

Я хочу, чтобы, когда я щелкаю по входному изображению (кнопка отправки изображения), форма проверялась, и если isFormValidated имеет значение TRUE, я запускаю «document.myts.submit ()», а затем onsubmit = » return upuInit (this) "выполняется. ПОЖАЛУЙСТА, ПОМОГИТЕ Я только что потратил слишком много времени на это, и теперь я застрял.

Ответы [ 2 ]

0 голосов
/ 03 марта 2011

Для других людей следующие функции я позаимствовал.и с некоторыми из моего издания для синхронного выполнения запросов Ajax.

function runSynchronousAjax(url) {
    var AJAX = GetXmlHttpObject();
    if (AJAX) {
        AJAX.open("GET", url, false);
        AJAX.send(null);
        return AJAX.responseText;
    } 
    else {
        return false;  
    }
}

function GetXmlHttpObject() {
    var A = null;
    if (window.XMLHttpRequest) {
        // code for IE7+, Firefox, Chrome, Opera, Safari
        A = new XMLHttpRequest();
    }
    else if (window.ActiveXObject) {
        // code for IE6, IE5
        //return new ActiveXObject("Microsoft.XMLHTTP");

        try {
            A = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch(e) {
            try {
                A = new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch(err) {
                A = null;
            }
        }
    }
    return A;
}
0 голосов
/ 03 марта 2011

Несколько заметок из того, что я вижу:

  1. Ваше предупреждение не ссылается на значение формы:

alert('yo iam back. val: '+document.forms['myts'].value);

Должно быть:

alert('yo iam back. val: '+document.forms['myts'].isFormValidated.value);

  1. Вы должны убедиться, что ваш AJAX-запрос выполняется синхронно (в режиме блокировки), не используя обычный асинхронный режим, в противном случае предупреждение будет запущено до того, как форма будет установлена ​​функцией обратного вызова, которую вы назначаете onreadystatechange.

  2. К сожалению, событие onsubmit на самом деле не возникает, когда вы отправляете форму через JavaScript, поэтому вам сначала нужно вызвать функцию upuInit(). Поэтому вам нужно изменить код с:

document.forms['myts'].submit();

Кому:

if(upuInit(document.forms['myts'])) {document.forms['myts'].submit()};

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...