0

jQuery にリモート ルール、つまり「check_username.php」を使用して「ユーザー名」に関連するリモート検証ルールを追加すると、作成中のフォームを使用して Internet Explorer で奇妙な動作が発生します。以下のコードでは、jquery スクリプトを利用し、サイト全体のページに統一されたビューを表示するための「page_start」カスタム関数を作成する view.php スクリプトを要求しています。これらは、view.php の jquery スクリプトです。

<script type="text/javascript" src="/StructuredPages/js/jquery.js"></script>
<script type="text/javascript" src="/StructuredPages/js/jquery.validate.js"></script>
<script type="text/javascript" src="/StructuredPages/js/jquery.validate.password.js"></script>

これは、クライアント側の検証が必要なフォーム コードであり、create_user_redo_old.php ファイルを使用してサーバー側の検証を行います。

    <?php

    require_once $_SERVER['DOCUMENT_ROOT'] . "/StructuredPages/scripts/view.php";

    $inline_javascript = <<<EOD
        $(document).ready(function() {
          $("#signup_form").validate({
            rules: {
          first_name: {
            minlength : 2
          },
              last_name: {
            minlength : 2
          },
          username: {
            minlength: 4,
        remote: "check_username.php"
          },
              street: {
            minlength : 5
          },
          city: {
            minlength : 2
          },
          postal_code: {
        minlength: 5
          },
              password: {
                minlength: 6
              },
              confirm_password: {
                minlength: 6,
                equalTo: "#password"
              }
            },
            messages: {
          first_name: {
            minlength: "First Name must contain at least 2 characters"
           },
          last_name: {
                minlength: "Last Name must contain at least 2 characters"
          },
          username: {
            minlength: "Username must contain at least 4 characters",
        remote: "Username already exists, please try another"
          },
          street: {
            minlength: "Street must contain at least 5 characters"
              },
          city: {
            minlength: "City must contain at least 2 characters"
          },
            postal_code: {
                minlength: "Zip Code must contain 5 numerals"
              },
              password: {
                minlength: "Passwords must be at least 6 characters"
              },
              confirm_password: {
                minlength: "Passwords must be at least 6 characters",
                equalTo: "Your passwords do not match."
              }
            }
          });
        });
    EOD;

    page_start("Free Member Registration", $inline_javascript); 
    ?>

    <div id="content">
    <h1>Member Registration</h1>
    <p>Please enter your information below:</p>
    <form id="signup_form" action="create_user_redo_old.php" 
          method="POST" enctype="multipart/form-data">
      <fieldset>
        <label for="first_name">First Name:</label> 
        <input type="text" name="first_name" id="first_name" size="20" class="required" /><br />
        <label for="last_name">Last Name:</label> 
        <input type="text" name="last_name" id-"last_name" size="20" class="required" /><br />
        <label for="username">Username:</label> 
        <input type="text" name="username" id="username" size="20" class="required" /><br />
        <label for="password">Password:</label> 
        <input type="password" id="password" name="password" 
               size="20" class="required password" />
        <div class="password-meter">
          <div class="password-meter-message"> </div>
          <div class="password-meter-bg">
            <div class="password-meter-bar"></div>
          </div>
        </div>
        <br />
        <label for="confirm_password">Confirm Password:</label> 
        <input type="password" id="confirm_password" name="confirm_password" 
               size="20" class="required" /><br />
        <label for="email">E-Mail Address:</label> 
        <input type="text" name="email" size="30" class="required email" /><br />
        <label for="street">Street:</label> 
        <input type="text" name="street" id="street" size="50" class="required" /><br />
        <label for="city">City:</label> 
        <input type="text" name="city" id="city" size="30" class="required" /><br />
        <label for="state">State:</label> 
        <select name="state" class="required">
            <option value=""></option>
            <option value="AL">Alabama</option>
            <option value="AK">Alaska</option>
            <option value="AZ">Arizona</option>
            <option value="AR">Arkansas</option>
            <option value="CA">California</option>
            <option value="CO">Colorado</option>
            <option value="CT">Connecticut</option>
            <option value="DE">Delaware</option>
            <option value="DC">District of Columbia</option>
            <option value="FL">Florida</option>
            <option value="GA">Georgia</option>
            <option value="HI">Hawaii</option>
            <option value="ID">Idaho</option>
            <option value="IL">Illinois</option>
            <option value="IN">Indiana</option>
            <option value="IA">Iowa</option>
            <option value="KS">Kansas</option>
            <option value="KY">Kentucky</option>
            <option value="LA">Louisiana</option>
            <option value="ME">Maine</option>
            <option value="MD">Maryland</option>
            <option value="MA">Massachusetts</option>
            <option value="MI">Michigan</option>
            <option value="MN">Minnesota</option>
            <option value="MS">Mississippi</option>
            <option value="MO">Missouri</option>
            <option value="MT">Montana</option>
            <option value="NE">Nebraska</option>
            <option value="NV">Nevada</option>
            <option value="NH">New Hampshire</option>
            <option value="NJ">New Jersey</option>
            <option value="NM">New Mexico</option>
            <option value="NY">New York</option>
            <option value="NC">North Carolina</option>
            <option value="ND">North Dakota</option>
            <option value="OH">Ohio</option>
            <option value="OK">Oklahoma</option>
            <option value="OR">Oregon</option>
            <option value="PA">Pennsylvania</option>
            <option value="RI">Rhode Island</option>
            <option value="SC">South Carolina</option>
            <option value="SD">South Dakota</option>
            <option value="TN">Tennessee</option>
            <option value="TX">Texas</option>
            <option value="UT">Utah</option>
            <option value="VT">Vermont</option>
            <option value="VA">Virginia</option>
            <option value="WA">Washington</option>
            <option value="WV">West Virginia</option>
            <option value="WI">Wisconsin</option>
            <option value="WY">Wyoming</option>
            <option value="AS">American Samoa</option>
            <option value="FM">Federated States of Micronesia</option>
            <option value="GU">Guam</option>
            <option value="MH">Marshall Islands</option> 
            <option value="MP">Northern Mariana Islands</option>
            <option value="PW">Palau</option>
            <option value="PR">Puerto Rico</option>
            <option value="VI">Virgin Islands</option>
        </select><br />
        <label for="postal_code">Zip Code:</label> 
        <input type="text" name="postal_code" id="postal_code" size="5" maxlength="5" class="required digits" /><br />
        <input type="hidden" name="MAX_FILE_SIZE" value="400000" />
        <label for="user_pic">Upload a picture:</label> 
        <input type="file" name="user_pic" size="30" /><br />
        <label for="bio">Bio:</label> 
        <textarea name="bio" cols="40" rows="10"></textarea>
      </fieldset>
      <br />
      <fieldset class="center">
        <input type="submit" value="Register" />
        <input type="reset" value="Clear and Restart" />
      </fieldset>
    </form>
  </div>

  <div id="footer"></div>
 </body>
</html>

これは check_username.php コードです

<?php
    require_once $_SERVER['DOCUMENT_ROOT'] . '/StructuredPages/scripts/app_config.php';
    require_once $_SERVER['DOCUMENT_ROOT'] . '/StructuredPages/scripts/database_connection.php';

    $name = trim($_REQUEST['username']);
    $uname = mysql_real_escape_string($name);

    $query = "SELECT username FROM users WHERE username='$uname';";
    $res = mysql_query($query);
    if (mysql_num_rows($res) != 0)  
    {
        $output = false;
    } else {
        $output = true;
    }
    echo json_encode($output);
?>

IE での問題は、MySQL データベース内の特定のユーザー名に対してのみ、ユーザー名の検証が機能する場合があることです。また、データベースでユーザー名を試しても、「ユーザー名は既に存在します...」というメッセージが表示されない場合は、別のメッセージが表示されると、そのフィールドが何であっても確認できず、問題が発生しているように見えます。 class="required" の結果としての「このフィールドは必須です」、または jquery 検証の minlength ルールの結果としての「ユーザー名には少なくとも 4 文字を含める必要があります」というメッセージ (ルールに従っている場合でも) などがあります。これに関する最も不思議なことは、特定のユーザー名が一致し、他のユーザー名が一致しない理由です。一致が見つかったようですが、何かが原因で特定のユーザー名がコードを壊しています。また、Chromeでも問題なく動作します。

4

1 に答える 1

0

これを変更する:

$(document).ready(function(){...})

と:

jQuery(function(){...})

フォーム スクリプトでの不安定な IE9 の動作を解決しました。Internet Explorer で jQuery を使用したリモート検証で奇妙な問題が発生している場合は、これを試してみてください。

于 2012-03-14T01:32:49.083 に答える