javascript - 如何同时检查文本框长度并检查重复项

标签 javascript php jquery

我在尝试解决此问题时遇到问题,我想检查重复项并检查用户名文本框中的长度是否小于或等于 3。两个返回有效后,我启用下一个文本框。

HTML:

<label for="uName" style="margin-left: 8px;">User Name:</label>
<input type="text" id="uName" name="uName" style="margin-left: 7px;" onkeyup="checkEmpty();checkUname();" disabled><br><br>
<label for="pWord1" style="margin-left: 8px;" >Password:</label>
<input type="password" id="pWord1" name="pWord1" style="margin-left: 17px;" onkeyup="checkLength();checkUname();" disabled>

如您所见,我正在使用 2 个按键事件,我知道部分问题,因此下面是这两个事件。

JavaScritp:(此检查用户名是否小于或等于 3)

function checkEmpty() {
    var msg = document.getElementById('msg'),
        uName = document.getElementById('uName'),
        pass1 = document.getElementById("pWord1");

    if ($("#uName").is(':focus')){//TODO combine check uname function with this one
            if (uName.value.length <= 3){
                msg.innerHTML = "User name is too short";
                pass1.disabled = true;
            }else{
                msg.innerHTML = "";
                pass1.disabled = false;
            }
    }

JavaScript:(这部分获取文本框值并从数据库中检查)

function checkUname() {

    var uName = document.getElementById("uName").value,
        pass1 = document.getElementById("pWord1");

    if(window.XMLHttpRequest)
    {
        xmlhttp=new XMLHttpRequest();
    }
    else
    {
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }

    xmlhttp.onreadystatechange=function()
    {
        if(xmlhttp.readyState==4 && xmlhttp.status==200){
            if (xmlhttp.responseText === "1"){
                document.getElementById("msg").innerHTML="Username taken";
            }
        }
    };
    xmlhttp.open("POST","../Functions/matchUname.php?uName="+uName,true);
    xmlhttp.send();
}

PHP:

<?php

include_once("../iConnect/handShake.php");

if (isset($_REQUEST["uName"])){

    $getUname = "SELECT uName FROM userlogin WHERE uName = :uName";
    $getUnameQuery = $dbConnect -> prepare($getUname);
    $getUnameQuery -> bindParam(':uName', $_REQUEST["uName"]);
    $getUnameQuery -> execute();

    if ($row = $getUnameQuery -> fetch(PDO::FETCH_ASSOC)){
        echo "1";
    }else{
        echo "2";
    }

}

我希望我已经表达清楚了,所以如果有人能引导我走向光明,那将是一个很大的帮助。

编辑:下面是我的问题的详细信息。

没有错误,两者都可以工作,问题是我需要将 pass1 文本框置于禁用模式,直到两个函数完成我确实尝试通过 checUname()` 传递 pass1.dissabled = false功能,但一旦我按下按键 pass1 文本框就会启用。

更新:设法让它按照我的预期工作,因此 JavaScript 代码很不错,希望它能在将来帮助其他人。

if ($("#uName").is(':focus')){
 if (uName.value.length <= 3){
   msg.innerHTML = "User name is too short";
   pass1.disabled = true;
 }else{
     if(uName.value.length > 0){
        checkUname();
     }
 }}

function checkUname() {

        if(window.XMLHttpRequest)
        {
            xmlhttp=new XMLHttpRequest();
        }
        else
        {
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }

        xmlhttp.onreadystatechange=function(){

            if(xmlhttp.readyState==4 && xmlhttp.status==200){
                if (xmlhttp.responseText === "1"){
                    msg.innerHTML="Username taken";
                    pass1.disabled = true;
                }else{
                    msg.innerHTML = "";
                    pass1.disabled = false;
                }
            }
        };
        xmlhttp.open("POST","../Functions/matchUname.php?uName="+uName.value,true);
        xmlhttp.send();
    }

最佳答案

这样的东西对你有用吗:

function checkUname(uName) {

if(window.XMLHttpRequest)
{
    xmlhttp=new XMLHttpRequest();
}
else
{
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}

xmlhttp.onreadystatechange=function()
{
    if(xmlhttp.readyState==4 && xmlhttp.status==200){
        if (xmlhttp.responseText === "1"){
            return true;
        } else {
            return false;
        }
    }
};
xmlhttp.open("POST","../Functions/matchUname.php?uName="+uName,true);
xmlhttp.send();
}

然后调用它:

if ($("#uName").is(':focus')){//TODO combine check uname function with this one
        if (uName.value.length <= 3){
            msg.innerHTML = "User name is too short";
            pass1.disabled = true;
        }else{
           if(checkUname(uName.value) {
               msg.innerHTML = "User name already in use";
               pass1.disabled = true;
           } else {
               msg.innerHTML = "";
               pass1.disabled = false;
           }
        }
}

关于javascript - 如何同时检查文本框长度并检查重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43606660/

相关文章:

javascript - 如何将 IRL 变量传递给 JavaScript

php - 缓存的 Ajax 调用

php - 如何在 PHP 中添加 [ 从复选框表单结果中检索?

php - "Last minute subscription"项目 PHP/MySQL 原子性问题

javascript - undefined object Jquery/javascript

c# - 需要简单的 Twitter API v1.1 示例来使用 jQuery 或 C# ASP.NET 显示时间线

javascript - Chrome 控制台自动点击

javascript - Angular : Mixing provider and custom service in module's config/run

javascript - AngularJS 和 NodeJs Express : routes and refresh

javascript - rails 5 : update action not working for AJAXified form