Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用onKeyUp时禁用javascript中的箭头键_Javascript_Php_Jquery_Html_Ajax - Fatal编程技术网

使用onKeyUp时禁用javascript中的箭头键

使用onKeyUp时禁用javascript中的箭头键,javascript,php,jquery,html,ajax,Javascript,Php,Jquery,Html,Ajax,我搜索了这个,但找不到问题。可能我没有使用合适的关键字。如果是重复的,我很抱歉 这是我的问题。我已经用HTML、PHP、AJAX和Javascript编写了一段代码。我在输入每个字符后检查数据库中的在线用户名可用性。问题是onKeyUp正在检测箭头键 左右箭头键 因此,当我尝试在文本字段中输入的文本之间插入一个字符时,光标会自动移动到文本字段的末尾。。因此无法在文本之间进行修改 这是我的HTML代码 <input type = "text" name = "txt_username" id

我搜索了这个,但找不到问题。可能我没有使用合适的关键字。如果是重复的,我很抱歉

这是我的问题。我已经用
HTML
PHP
AJAX
Javascript
编写了一段代码。我在输入每个字符后检查数据库中的
在线用户名可用性
。问题是
onKeyUp
正在检测
箭头

左右箭头键

因此,当我尝试在文本字段中输入的文本之间插入一个字符时,
光标会自动移动到文本字段的末尾。。因此无法在文本之间进行修改

这是我的
HTML代码

<input type = "text" name = "txt_username" id = "user" onKeyUp = "check_username(this.value)">
<span id = "check" style = 'color: green; font-size: 20px'> </span> <br>
这是我的用户名\u check.php

<?php
mysql_connect("localhost", "root", "");
mysql_select_db("company");

$username = ($_REQUEST['txt_username']);
$a = 0;

if (strlen($username) < 4) {
    $a = 2;
    echo $a . "^" . $username;
} else if (checkexistence($username)) {
    $a = 1;
    echo $a . "^" . $username;
} else {
    $a = 0;
    echo $a . "^" . $username;
}

function checkexistence($username) {
    $check = mysql_query("select username from employee");

    while ($row = mysql_fetch_array($check)) {
        if (strcmp($username, $row['username']) == 0) {
            return true;
        }
    }
    return false;
}
?>

我如何管理(通过禁用或保持一些检查)箭头键,以便在两者之间插入文本

<input type = "text" name = "txt_username" id = "user" onKeyUp = "if(!(event.keyCode>36&&event.keyCode<41)){check_username(this.value)}">

使用此脚本

$(document).keyup(function(e){
    if (e.keyCode >= 37 && e.keyCode <= 40) { 
       //do something
       return false;
    }
});
$(文档).keyup(函数(e){

如果(e.keyCode>=37&&e.keyCode=37&&e.keyCode我会在
onkeyup
(HTML不区分大小写)中稍作调整,请使用元素和事件,以便在回调中使用它们:

<!-- use element and event as parameters -->
<input type = "text" name = "txt_username" id = "user" onkeyup = "check_username(this, event)">
<span id = "check" style = 'color: green; font-size: 20px'> </span> <br>


然后,回调可以检查事件中的键码,并在必要时使用元素发送数据和执行操作:

function check_username(element, event) {
    if (event.keyCode > 36 && event.keyCode < 41) {
        // when arrow keys were pressed, do nothing
        return false;
    }

    xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            var arr = xmlhttp.responseText.split("^");
            if (element.value != arr[1]) {
                // only make change when required
                element.value = arr[1];
            }

            if (arr[0] == 2) {
                $("#check").html("Enter a username of at least 4 characters");
            } else if (arr[0] == 1) {
                $("#check").html("Username already exists");
            } else {
                $("#check").html("Username available");
            }
        }
    }
    // encode user name to use as get parameter
    xmlhttp.open("GET", "username_check.php?txt_username=" + encodeURIComponent(element.value), true);
    xmlhttp.send();
}
功能检查\u用户名(元素、事件){
如果(event.keyCode>36&&event.keyCode<41){
//按箭头键时,不执行任何操作
返回false;
}
xmlhttp=新的XMLHttpRequest();
xmlhttp.onreadystatechange=函数(){
if(xmlhttp.readyState==4&&xmlhttp.status==200){
var arr=xmlhttp.responseText.split(“^”);
if(element.value!=arr[1]){
//仅在需要时进行更改
element.value=arr[1];
}
如果(arr[0]==2){
$(“#检查”).html(“输入至少4个字符的用户名”);
}else if(arr[0]==1){
$(“#检查”).html(“用户名已存在”);
}否则{
$(“#检查”).html(“用户名可用”);
}
}
}
//对用户名进行编码以用作get参数
open(“GET”,“username\u check.php?txt\u username=“+encodeURIComponent(element.value)),true);
xmlhttp.send();
}

正如下面的答案所指出的。你需要获取这些事件的键码,然后调用一个函数或
preventDefault
这是一个快速的函数。我将在
5分钟内接受它。现在,我想我在写问题上浪费了太多时间。我认为如果(!(event.keyCode>36&&event.keyCode您既不应该将
event.keyCode==8
包含在backspace中,也不应该将
event.keyCode==46
包含在delete中,因为在这种情况下,由于文本已更改,您将需要进行新的搜索。您可以告诉我们必须将此脚本包含在何处吗?请将其包含在您的文档中准备好..我建议使用keydo。)wn事件而不是keyup使用
onkeydown
的优点是什么?我没有有效的解释,很多时候我对该事件有问题。使用keyup更好。如果您有问题,请尝试在keydown中更改它
<!-- use element and event as parameters -->
<input type = "text" name = "txt_username" id = "user" onkeyup = "check_username(this, event)">
<span id = "check" style = 'color: green; font-size: 20px'> </span> <br>
function check_username(element, event) {
    if (event.keyCode > 36 && event.keyCode < 41) {
        // when arrow keys were pressed, do nothing
        return false;
    }

    xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            var arr = xmlhttp.responseText.split("^");
            if (element.value != arr[1]) {
                // only make change when required
                element.value = arr[1];
            }

            if (arr[0] == 2) {
                $("#check").html("Enter a username of at least 4 characters");
            } else if (arr[0] == 1) {
                $("#check").html("Username already exists");
            } else {
                $("#check").html("Username available");
            }
        }
    }
    // encode user name to use as get parameter
    xmlhttp.open("GET", "username_check.php?txt_username=" + encodeURIComponent(element.value), true);
    xmlhttp.send();
}