【问题标题】:jQuery Validation Plugin - compare two form fields in one remote calljQuery Validation Plugin - 在一次远程调用中比较两个表单字段
【发布时间】:2012-03-03 10:34:37
【问题描述】:

我正在尝试使用 jQuery 的验证插件来更改用户名。我设法使用远程选项来检查是否在我的数据库中找到了用户名。下面是我的工作示例。但是,如果示例表单中的 Peter 没有更改他的姓名,则该字段无效,因为该姓名已在数据库中。我不知何故需要包含条件 - 如果#new_name 与#current_name 相同,则#new_name 字段有效。有可能吗?

jQuery 验证插件

<script type="text/javascript">
$(document).ready(function(){
   $("form").validate({
      rules: {
         new_name: {
            required: true,
            remote: {
               url: "names.php",
               type: "post",
             }
         }
      },
      messages: {
         new_name: {
            remote: jQuery.validator.format("{0} is already taken, please enter a different name.") 
     }
      }
   });
});
</script>

HTML 表单:

<form method="post" id="myForm" action="">
 <!-- User enters a new name -->
 <input id="new_name" name="new_name" value="peter" type="text" />
 <!-- This is a current username, populated from the database -->
 <input id="current_name" name="current_name" value="peter" readonly="readonly" />
 <input type="submit" name="submit" id="submit"/>
</form>

远程调用:names.php

<?php
   $request = trim(strtolower($_REQUEST['new_name']));
   // Here is the array of all user names in my database.
   $names = array('peter','jane','bill','george');
   $valid = 'true';
   foreach($names as $name) {
      if( strtolower($name) == $request ) {
         $valid = 'false';
      }
   }
   echo $valid;
?>

【问题讨论】:

    标签: php jquery validation


    【解决方案1】:

    我认为你应该这样做(服务器端)

    $request = trim(strtolower($_REQUEST['new_name']));
    // Here is the array of all user names in my database.
    $names = array('peter','jane','bill','george');
    $valid = true;
    foreach($names as $name) {
      if( strtolower($name) == $request ) {
         $valid = false;
      }
    }
    echo json_encode($valid);
    

    【讨论】:

      【解决方案2】:
      rules: {
               new_name: {
                  required: true,
                  remote: {
                     url: "names.php",
                     type: "post",
                     data: current_name: function () {
                      return $('current_name').val();
                        new_name: function () {
                      return $('new_name').val();
                  }
                   }
               }
            },
      

      【讨论】:

        【解决方案3】:

        您没有根据新名称检查当前名称。

        试试这个:

        <?php
            $request = trim( strtolower( $_REQUEST['new_name'] ) );
            $old = trim( strtolower( $_REQUEST['current_name'] ) );
            // Here is the array of all user names in my database.
            $names = array( 'peter', 'jane', 'bill', 'george' );
            $valid = 'true';
        
            if ( $request == $old ) {
                $valid = "true";
            } else {
                foreach ( $names as $name ) {
                    if ( strtolower( $name ) == $request ) {
                        $valid = 'false';
                    }
                }
            }
            echo $valid;
        ?>
        

        现在,如果名称未更改,则返回 true,并且仅在更改名称时进行存在检查。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-10-21
          • 2023-03-05
          • 1970-01-01
          • 1970-01-01
          • 2015-07-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多