当输入改变时,我该如何运行一个JavaScript函数?

22
当用户在我的网站上创建新账户时,我想检查该用户名是否已存在。我希望这个检查在他们离开用户名输入框且进入密码输入框时运行。
我尝试了:
<input type="text" onkeyup="check_user(this.value)"/>

不,这是为了注册而设计的,如果该用户已存在,则无法使用此用户名提交。 - mamrezo
你要找的是blur事件。但是@Awais提供了一个更好的解决方案,因为当输入框失去焦点且文本内容发生改变时,change事件将被触发。 - Felix Kling
可能是检测文本框输入变化的重复问题。 - azerafati
5个回答

24

在文本字段的 change 事件上调用该函数:

<input name="username" onChange="check_user(this.value);" type="text"/>

我做了这个,但是当通过单击其他输入或切换功能的选项卡来切换输入时,函数没有响应! - mamrezo
你是否在所有输入上使用正确的拼写调用函数? - Awais Qarni
1
+1,“change”比“blur”更好,而且“input”确实需要一个“name”。 - Felix Kling
感谢Felix Kling,我同意您的观点。 - Awais Qarni
@mamrezo:仔细检查你的代码,它应该可以正常工作:http://jsfiddle.net/VNV5P/1/ - Felix Kling

14
你需要使用"onblur"事件。它会在控件失去焦点时触发,这似乎正是你所需要的。

13
因为您在代码示例中使用了 onkeyup,所以听起来您想在每次按键时调用一个函数。如果是这样的话,那么您应该使用 oninput,而不是会在 input 失去焦点时触发的 onchange。使用 oninput 会在输入框内部发生任何更改时触发。

1

我认为你想要检查用户的重复性。 你需要编写服务器端代码来实现。


我知道这是一个 AJAX 的工作,但是除了 onkeyup 我应该输入什么? - mamrezo

0
如果你想在窗口中输入特定内容时触发某些操作:
phr = 'lol'
ltr = phr.split('')
text = ''

document.addEventListener('keyup',function(k){
    if (ltr.includes(k.key)) {
        text += k.key
        if (text == phr) {
            console.log('Typed!')
            text = ''
        }
    } else {
        text = ''
    }})

作为一个函数,您可以这样使用它:

function wtt(phrase,clb) {
    phr = phrase
    ltr = phr.split('')
    text = ''

    document.addEventListener('keyup',function(k){
        if (ltr.includes(k.key)) {
            text += k.key
            if (text == phr) {
                clb()
                text = ''
            }
        } else {
            text = ''
        }})
}

wtt('my phrase', function () {
    console.log('dostuff')
})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接