preventDefault()不在输入类型文本中工作

时间:2013-07-18 15:46:24

标签: javascript javascript-events jquery

这是我的代码:

$('#Login').keydown(function(e){         
        if(e.which  == 32){     
            alert("enter");
            this.preventDefault();            
        }        
    });

此代码不起作用,但发送警报

$('#Pwd,#Pwd2').on('keydown',function(e){
        if(e.which == 32){
            e.preventDefault();
        }
    });

此代码有效。 我不明白为什么。

2 个答案:

答案 0 :(得分:6)

您希望阻止Event的默认操作(作为事件函数的参数传入,您将其称为e)。

this是您的事件的目标元素(即:在这种情况下e.target将是您的#Login元素)而不是事件本身,这不具备preventDefault()

只需使用Event对象:

$('#Login').keydown(function(e){         
    if(e.which == 32){     
        e.preventDefault();            
    }        
});

有了上述内容,您每次点击#Login中的空格键时都会看到该活动已取消:http://jsfiddle.net/xWmUU/

答案 1 :(得分:1)

preventDefault是Event对象的一个​​方法,因此在事件调用时它有效。

在这种情况下,

this会引用#Login,这是一个DOM对象,不会有preventDefault方法。

请注意,由于事件传播的工作原理,this并不总是等于e.target