Я хотел бы вернуть заданное значение ввода после того, как я в него что-то набрал - PullRequest
1 голос
/ 28 мая 2011

По какой-то причине я не могу понять, как вернуть значение ввода после того, как я что-то в него ввел. Это связано с этой проблемой , и я не могу ничего проверить без распознавания значения имени пользователя. Я использую jQuery 1.6.1 и Validate 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(), чтобы получить значение имени пользователя? Я так растерялся, почему он не дает мне ту ценность, которая мне нужна!

Ответы [ 2 ]

1 голос
/ 28 мая 2011

Вы жестко запрограммировали имя пользователя в начале вашего 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" />

Помещение в нужное место означает, что при загрузке страницы она немедленно получает значение в текстовом поле имени пользователя, которое будет пустым.

EDIT:

немного изменил код для корректной работы

РЕДАКТИРОВАТЬ: Jsfiddle вышеуказанного кода

0 голосов
/ 28 мая 2011

$. Val () нормально на <input>s.Дайте нам ссылку?Может быть, мы можем видеть это там?

Кроме того, атрибут "for" должен быть username , если идентификатор действительно username , а не uname .

И поскольку вы даете $. Ajax уже строковую строку, попробуйте добавить также processData: false

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...