2

这是我的代码:

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

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

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

这段代码有效。我不懂为什么。

4

2 回答 2

6

您想要阻止的默认操作Event(作为事件函数的参数传入,您正在调用它e)。

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

也只需使用该Event对象:

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

有了上面的内容,你会看到每次点击空格键时事件都会被取消:http #Login: //jsfiddle.net/xWmUU/

于 2013-07-18T15:47:23.150 回答
1

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

thiswill 在这种情况下引用#Login,它是一个 DOM 对象,不会有preventDefault方法。

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

于 2013-07-18T16:41:04.303 回答