【问题标题】:I'd like to return the given value of an input after I've typed something into it我想在输入内容后返回输入的给定值
【发布时间】:2011-05-27 23:06:42
【问题描述】:

由于某种原因,我无法弄清楚在输入内容后如何返回输入值。这与this problem 有关,如果没有识别用户名值,我将无法验证任何内容。我正在运行 jQuery 1.6.1 并验证 1.8.1。

这是 HTML 表单:

<form class="cmxform" action="register.php" method="post" name="signup" id="signup">
   <ul>
      <li>
        <label for="username">Username: <em>*</em></label>
        <input type="text" id="username" name="Username" size="20" class="required" placeholder="Username" />
      </li>
   </ul>
</form>

在提交表单之前,我想确保我可以看到我在输入中输入的用户名的值。我有一个返回用户名值的警报,但警报始终不显示任何内容。这是我正在使用的 JS 代码:

$(document).ready(function(){

var username = $("#username").val();
var parameter = "action=checkusername&username="+username;

$.validator.addMethod("checkAvailability",function(value,element){
    $.ajax({
          url: "dbquery.php",
          type: "POST",
          async: false,
          data: parameter,
          success: function(output) {
                     alert (username);
                     return true;
         }
     });
},"Sorry, this user name is not available");

// jQuery Validation script
    $("#signup").validate( {
        rules: {
            Username: {
                required: true,
                minlength: 5,
                checkAvailability: true // remote check for duplicate username
                }
            }
        },
        messages: {
            Username: {
                required: "Enter a username"
            }
        },
        submitHandler: function(form) {
            form.submit();
        }
    });

我应该使用val() 以外的其他东西来获取用户名的值吗?我很困惑为什么它没有给我我需要的价值!

【问题讨论】:

    标签: javascript jquery validation jquery-validate


    【解决方案1】:

    您在 javascript 的开头对用户名进行硬编码。在 addMethod 成功调用中执行此操作

    $.validator.addMethod("checkAvailability",function(value,element){
      var nameAvailable = false;
      $.ajax({
          url: "dbquery.php",
          type: "POST",
          async: false,
          data: "action=checkusername&username="+value,
          success: function(output) {
            //server returns whether username is valid or not
            //if it is valid set nameAvailable to true like so:
            nameAvailable = true;
          }
      });
    
      return nameAvailable;
    
    });
    
    $("#signup").validate({
      username: {
        required: true,
        checkAvailability: true
      },
      messages: {
        username: {
          required: "Username is required",
          checkAvailability: "Sorry, this user name is not available"
        }
      },
      submitHandler: function(form) {
        form.submit();
      }
    });
    

    HTML

    <input type="text" id="username" name="username" size="20" class="required checkAvailability" placeholder="Username" />
    

    把它放在你现在拥有的地方意味着当页面加载时它会立即获取用户名文本字段中的值,该值将是空的。

    编辑:

    稍微修改了代码以使其正常工作

    编辑:jsfiddle of above code

    【讨论】:

    • @pthurlow 在我的示例中,我还必须修改 type: "GET" 才能使其正常工作。谢谢。
    • 酷,我修改了代码。我认为这种方式最有意义。请注意,输入上有另一个名为 checkAvailability 的类
    • @pthurlow 不错,太棒了。看来return nameAvailable 行将其中断,因此无论是true 还是false,都不会显示任何内容。
    • @pthurlow 当nameAvailable = false 时,我才看到messages: checkAvailability: "Sorry, this usern name is not available" 消息。当nameAvailable = true 时,我什么也看不见。另外,如果验证错误消息在messages: 中,是否还需要在addMethod 的末尾也存在?
    • 所以 nameAvailable 的值决定了消息是否显示。因此,当 nameAvailable 为 true 时,这意味着您的服务器代码确定用户名可用。签出这个 jsfiddle:jsfiddle.net/WPwnC 并将 isNameAvailable 从“true”更改为“false”以在有效和无效用户名之间切换。另外,是的,您不需要 addMethod 之后的文本。生病编辑出来,谢谢
    【解决方案2】:

    $.val()&lt;input&gt;s 上很好。 给我们一个链接?也许我们可以在那里看到它?

    此外,如果 id 确实是 username 而不是 uname,“for”属性应该是 username

    既然你给 $.ajax 一个已经字符串化的字符串,请尝试添加 processData: false

    【讨论】:

    • 糟糕,我修正了用户名的拼写错误。遗憾的是,processData:false 没有纠正问题。我会提供一个链接,但遗憾的是,这是一个 NDA 项目,我无法向任何人展示。
    猜你喜欢
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-15
    • 2011-06-26
    相关资源
    最近更新 更多