我已经尝试了几个小时了。我想检查用户名是否已存在于DB中。如果是,请提醒并不要提交。如果没有,请提交。这是我的代码。
$(function() {
$("#new_user").on("submit", function() {
var anyFieldIsEmpty = $('.newuser_input').filter(function() {
return $.trim(this.value).length == 0;
}).length > 0;
if (anyFieldIsEmpty) {
alert("There are empty fields!");
return false;
}
else {
check_curr_username();
return false;
}
});
});
function check_curr_username() {
var username = $("#user_username").val();
$.ajax({
"url": "/checkusername",
"data": {"name":username},
"type": "get",
"dataType": "json",
"success": function(data) {
alert('Username'+' '+data.username +' '+'is already taken' );
$("#user_username").focus();
return false;
},
"error": function() {
$("#new_user").submit();
return true;
}
});
}
这是一个Rails表单。代码仅在用户名已存在时才有效。但如果没有,则表格不提交。
答案 0 :(得分:0)
我们需要 checkusername 页面,但我认为表单未提交,因为未触发错误(即:未发生错误)。 如果用户名尚未使用,则 checkusername 页面应返回一个specfic值,然后您可以处理该表单。
答案 1 :(得分:0)
这是我检查唯一用户名的方法。我可能会投票,因为它不是Rails,而是PHP。
<style>.nodisplay{display: none;}</style>
<form id="usersigningup" name="usersigningup" method="post" action="">
<input type='text' name='name' id='nose' pattern='[A-Za-z0-9_]{5,20}' required>
<input type='text' name='password' id='password' pattern='[A-Za-z0-9_]{5,20}' required>
<input class="nodisplay" type="submit" id="usersignup" name="usersignup" value="Go!"></form><br>
<span id='response'></span>
在我的CSS中,提交按钮的默认显示设置为无。接下来我使用javascript keyup函数来收集id =&#39; nose&#39;的输入字段。 (这是用户名)并向php发送ajax帖子,然后在我的数据库上运行查询。
$(document).ready(function(){
$('#nose').keyup(function(){
var name = $('#nose').val();
$.ajax({
type: 'post',
data: {ajax: 1,name: name},
success: function(response){
$('#response').html(response);
}});});});
接下来我使用mysqli查询。
<?php include ('connect.php'); if( isset($_POST['ajax']) && isset($_POST['name']) ){
$un = $_POST['name'];
$sql51 = mysqli_query($conn, "SELECT username FROM mysite Where username = '$un'");
if (mysqli_num_rows($sql51) > 0) {
echo "<font color='red'>Sorry <b><i>" . $un . "</i></b> has been taken</font><script>document.getElementById('usersignup').style.display='none';</script>";
} else {
echo "<font color='green'><b>The Username <i>" . $un . "</i> is available</b></font><script>document.getElementById('usersignup').style.display='block';</script>";}
exit;}?>
注意&#39; if&#39;查询中的语句;这将运行两个脚本之一。第一个是将提交按钮的显示保持为无,如果存在完全匹配并且回应&#39;抱歉(用户名)已被采取&#39;在一个带有id =&#39;响应&#39;的html元素中。第二个脚本将回显&#39;用户名(用户名)可用&#39;并将提交按钮样式的显示设置为&#39; display:block&#39 ;;使其可点击。
正如我所说,这一切都发生在一个keyup事件上,因此每次按下一个键时运行查询并放开它,你会看到你在响应元素中输入的字符;以及是否看到提交按钮。
这个例子中的PHP是一个例子,不被认为是安全的黑客;但是,在不允许大多数字符的形式中设置了一个模式属性。我希望这会有所帮助。