1

何が間違っているのか理解できません。validateForm()はonsubmitから実行されていないようです。これがvalidateForm()です

function validateForm() {
    var amt = IsNumeric(document.forms["InvGenPay"]["Amount"].value);

    alert(amt);

    if (amt == false)
    {
        alert("placeholder to avoid scrolling.");
        return false;
    }
    else
    {
        return true;
    }
}

function IsNumeric(strString)
{
    //  check for valid numeric strings  
    var strValidChars = "0123456789.";
    var strChar;
    var blnResult = true;

    if (strString.length == 0) return false;

    //  test strString consists of valid characters listed above
    for (i = 0; i < strString.length && blnResult == true; i++)
    {
        strChar = strString.charAt(i);
        if (strValidChars.indexOf(strChar) == -1)
        {
            blnResult = false;
        }
    }

    if (0 > parseFloat(strString))
    {
        return false;
    }
    else
    {
        return blnResult;
    }
}

onsubmitを使用したフォームは次のとおりです。

<script type="text/javascript" language="JavaScript1.2">
document.write('<form name="InvGenPayDonation" action="'+PostURL+'" onsubmit="return validateForm();" method="POST">');
</script>


<input type='text' name='DonationAmount' value="0.00">
In honor of <span style="color: #FF0000"><br />
<input type='text' name='TransDesc' id='TransDesc' value="" >
<input type="submit" value="Next">
</form>
4

2 に答える 2

3

最大の問題は、検証コードに正しいフォーム名(またはそのことについては正しいフィールド名)がないことです。

var amt = IsNumeric(document.forms["InvGenPay"]["Amount"].value);

vs

'<form name="InvGenPayDonation" action="'+PostURL+'" 

完全に機能するコード:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"         
   "http://www.w3.org/TR/html4/strict.dtd">
<head>
  <title>Sampe file</title>

  <script>
function validateForm() {
    // Badly named variable, since this is actually a boolean of 'IsNumeric'
    var amt = IsNumeric(document.forms["InvGenPayDonation"]["DonationAmount"].value);


    // Can be simplified as simply:
    //return amt;
    alert('Amt = ' + amt);

    if (!amt)
    {
        alert("placeholder to avoid scrolling.");
        return false;
    }
    else
    {
        return true;
    }
}

function IsNumeric(n) {
  // Shamelessly stolen from: 
  // http://stackoverflow.com/questions/18082/validate-numbers-in-javascript-isnumeric
  return !isNaN(parseFloat(n)) && isFinite(n);
}

</script>

<body>
<form name="InvGenPayDonation" action="#"
        onsubmit="return validateForm();" 
        method=POST>


<input type='text' name='DonationAmount' value="0.00">
In honor of <span style="color: #FF0000"><br />
<input type='text' name='TransDesc' id='TransDesc' value="" >
<input type="submit" value="Next">

<script>
  // Assigned for testing purposes
  var  PostURL = "#"
  document.forms.InvGenPayDonation.action = PostURL;
</script>
</form>
</body>
</html>
于 2012-09-12T21:21:31.103 に答える
2

JavaScript文字列にエスケープされていない改行を含めることはできません。JavaScriptコンソールを確認してください。おそらく構文エラーが発生しています。そのエラーが、が実行されていない理由onsubmitです。

また、提案されているように、を使用せずdocument.write、通常はHTMLでフォームを記述し、JavaScriptを使用してPOSTURLのみを追加します

<form name="InvGenPayDonation" onsubmit="return validateForm();" method="POST">
    <input type='text' name='DonationAmount' value="0.00">
    In honor of <span style="color: #FF0000"><br />
    <input type='text' name='TransDesc' id='TransDesc' value="" >
    <input type="submit" value="Next">
</form>

<script type="text/javascript">
    document.forms.InvGenPayDonation.action = PostURL;
</script>

PS Jeremy J Starcherが指摘したように、フォーム名は内部で間違っていvalidateFormます。

于 2012-09-12T21:19:48.153 に答える