0

フォームを検証したいのですが、フォームを検証するために 9 つの異なる関数が必要です。どの検証関数を使用するかは、画面上のスライダーによって決定するか、スライダーによって制御されるスパン「範囲」の値によって決定する必要があります)。

以下のように1つの関数を使用しているだけであれば、フォームをうまく検証できます。

<script>
    function validateFormMethod1() {
        // do my validation stuff here
    }
</script>

<form method="post" action="whatevermailscript.php"name="GuestInfo" onSubmit="return validateFormMethod1();">
    <input type="submit" value="Send" name="submit" />
    <span>Guests</span>
    <span id="range">1</span>
    <input id="scaleSlider" type="range" value="1" min="1"  max="9" step="1" onchange="showValue(this.value) ; showOrHide(this.value)"/>

しかし、これにこれを追加して、range.value==2 validateFormMethod2代わりに if が呼び出されるようにするにはどうすればよいvalidateFormMethod1ですか?


更新 3:

<script>


   function validateFormMethod0() {

    }  

    function validateFormMethod1() {
       window.alert("Method 1");
       return false;
    }

    function validateFormMethod2() {
        window.alert("Method 2");
        return false;
    }


    function validateFormMethod3() {
      window.alert("Method 3.");
      return false;
    }


    function validateFormMethod4() {
       window.alert("Method 4.");
       return true;
    }





    var validationFunctions = [
    validateFormMethod0,
   validateFormMethod1,
   validateFormMethod2,
   validateFormMethod3,
    validateFormMethod4

];
    function validateForm() {    

     var range = document.getElementById("range");

    validationFunctions[range.innerHTML]();
}


</script>

提案どおりにこれを機能させることはまだできませんが、これは私の目的に役立ちます:

 function validateForm()
{


 var range = document.getElementById("range");


   if (range.innerHTML == "1")
    {
        // do my validation stuff for case one here


    }


   if (range.innerHTML == "2")
    {
        // do my validation stuff for case two here


    }

} 
4

1 に答える 1

3

関数の配列を使用します。

var validationFunctions = [
   validateFormMethod1,
   validateFormMethod2,
   validateFormMethod3,
   ....
];

function validateForm() {        
    validationFunctions[range.value]();
}
于 2012-12-04T12:14:20.447 に答える