1

私はphpにサンプルスクリプトを持っており、検証はjavascriptを使用して行われます。ボタンをクリックするだけでajaxスクリプトを使用して入力ボックスを生成しています。[送信]をクリックすると、すべてのボックスが入力されているかどうかがチェックされます。forループを使用してボックスを検証しています。ボックスが空の場合、正しく警告され、同じ場合にfalseが返されます。しかし、問題は、すべてのボックスが入力されると、何も返さず、この条件に対してtrueを返しても関数が機能しなくなることです。関数付きのJavaScriptコードを以下に示します

function addInput(){
var xmlhttp;

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

xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    var result = xmlhttp.responseText;


     var newElem = document.createElement ("div");
            newElem.innerHTML = result;
     newElem.id = "input";

       var container = document.getElementById ("main");
            container.appendChild (newElem);

    }

  }
xmlhttp.open("GET","insert.php",true);
xmlhttp.send();
}

var count = '<?php echo $_SESSION['z']; ?>'

function check(){
    function validate()
    {   
        for(var i=1; i<=count+10; i++)
        {
            if(document.getElementById("text"+i+"").value == "")
            {
                alert("Please Enter Start Date For Sales Promotion");
                document.getElementById("text"+i+"").focus();
                return 'false';
            }
        }
        return 'abc';
    }

    var flag = validate();
    if(flag != 'false')
    {
        alert("correct");
    }
}

私のHTMLコードを以下に示します

<form method="post" action="save.php">
<div id="main">
    <div id="input1">
            Enter Name </br></br>
            <input type="text" id="text1" />
            <?php $_SESSION['z'] = 2; ?>
    </div>
</div>
</br>
<input type="button" value="add another" onclick="addInput()" />
<input type="button" value="Submit" onclick="check()" />
</form>
<div id="display"></div>

私のajaxコードを以下に示します

 <?php
session_start();
$q = $_SESSION['z'];

?>

            Enter Name </br></br>
            <input type="text" id="text<?php echo $q; ?>" />

<?php $q = $q + 1; 
$_SESSION['z'] = $q;

?>

問題は、すべてのフィールドが入力されても何も返されないことです。

4

2 に答える 2

0

ページに存在しないアイテムを取得しようとすると、エラーが発生する可能性があります。

            if(document.getElementById("text"+i+"").value == "")
            {
                alert("Please Enter Start Date For Sales Promotion");
                document.getElementById("text"+i+"").focus();
                return 'false';
            }

ここでは、「text8」、「text9」などの ID を持つアイテムがない可能性があります。その場合、存在しない要素の値を取得しようとすると、null 参照エラーが発生します。

次のように変更してみてください。

            var ele = document.getElementById("text"+i); 
            if(ele && ele.value == "")
            {
                alert("Please Enter Start Date For Sales Promotion");
                document.getElementById("text"+i+"").focus();
                return 'false';
            }

eleこれは、その値にアクセスする前に null かどうかを検証します。

于 2012-12-01T13:12:07.210 に答える
0

これは頻繁に発生する可能性があり、使用するブラウザーによっては、クリック イベントと送信イベントが同時に呼び出されるため、安全ではありません (たとえば、IE で送信ボタンが別の送信関数を呼び出すと、フォームが送信されます)。 2回...)

チェック機能をフォームの onBeforeSubmit イベントに接続する必要があります。

于 2012-12-01T13:01:57.123 に答える