2011-08-13 22 views
3

我想要一个脚本来验证按下的按键是'空格键',键码32.我注意到IE使用了其他函数名。使用event.which来验证用户是否按下空格键在Firefox中不起作用

我尝试了很多在这里找到解决方案,而这个:

​​

但它仍然没有工作在Firefox。

我想我在Firefox中错误地调用了该函数。放眼整个脚本:

<textarea onkeydown="predicao(this);" cols="40" rows="10" id="test" onfocus="this.focus()"></textarea> 
<input id="example" style="display: none;" onkeydown="javascript: insert(this);"/> 

<script language="Javascript"> 
<!-- 

function predicao(objeto){ 
    comprimento = objeto.value.length; 
    var antipenultimo = comprimento - 4; 
    var input = objeto.value.substring(antipenultimo,comprimento); 
    var output = ""; 
    for(i=0; i<input.length; ++i){ 
     if(output != "") output += ", "; 
     output += input.charCodeAt(i); 
    } 
    if (output == "91, 91, 103, 32"){ 

     var preditor = document.getElementById('example'); 
     preditor.value = ''; 
     preditor.style.display = 'block'; 
     preditor.focus(); 
     preditor.select(); 
    } 
} 
function insert(objeto){ 
event = event.which || window.event // IE does not pass event to the function 
if(event == window.event){ 
    code = event.keyCode; 
}else{ 
    code = event.charCode; 
} 
    if(keynum == '32') { 
     var texto = document.getElementById('test').value; 
     texto += objeto.value+']]'; 
     $('#test').focus(); 
     document.getElementById('test').value = texto; 
     objeto.style.display = 'none'; 
    } 
} 
$(document).ready(function(){ 
    var data = "Ab Aco Ado Ala Mano Cata Ca Obo Olo Po Poq".split(" "); 
$("#example").autocomplete(data);}); 
</script> 

我试图做的是 - (我不知道名字) - 的预测帮助输入器一个文本里面。它使用jQuery自动完成。 当用户在textarea(id = test)内键入[[g']时,会打开一个自动完成的输入(id = example),因此它在'data'中搜索。当用户找到所需的数据时,他必须按空格键将数据插入到textarea中,以']]结尾'但它在Firefox中不起作用。

(是的,我使用的JavaScript和jQuery以相同的元素在一个完全错误的方式,因为我不是在这太好了,我会尽力改正它Firefox的工作之后)。

+0

显示完整的功能。你必须通过事件作为函数任何(事件)为FX工作 - 也看看这里http://stackoverflow.com/questions/302122/jquery-event-keypress-which-key-was-pressed – mplungjan

+0

对!完成! – Leo

+0

不需要javascript:onkeydown =“javascript:<<< – mplungjan

回答

4

编辑

HMTL:

<textarea onkeydown="predicao(this);" cols="40" rows="10" id="test" onfocus="this.focus()"></textarea> 
<input id="example" style="display: none;" onkeydown="insert(this, event);"/> 

JS:

function predicao(objeto){ 
    var comprimento = objeto.value.length; 
    var antipenultimo = comprimento - 4; 
    var input = objeto.value.substring(antipenultimo,comprimento); 
    var output = ""; 
    for(var i=0; i<input.length; ++i){ 
     if(output != "") output += ", "; 
     output += input.charCodeAt(i); 
    } 
    if (output == "91, 91, 103, 32"){ 
     var preditor = document.getElementById('example'); 
     preditor.value = ''; 
     preditor.style.display = 'block'; 
     preditor.focus(); 
     preditor.select(); 
    } 
} 
function insert(objeto, evt){ 
    var e = evt || event; 
    var code = e.keyCode || e.which; 
    if(code == '32') { 
     var texto = document.getElementById('test').value; 
     texto += objeto.value+']]'; 
     $('#test').focus(); 
     document.getElementById('test').value = texto; 
     objeto.style.display = 'none'; 
    } 
} 
$(document).ready(function(){ 
    var data = "Ab Aco Ado Ala Mano Cata Ca Obo Olo Po Poq".split(" "); 
$("#example").autocomplete(data);}); 

我在这里使用了Alexander Kahoun和pimvdb发布的内容。

+0

它可以在Chrome中使用,但我认为我在FF中调用它是错误的。这是我所有的代码: – Leo

+2

声明'代码可能是个好主意''''var''你也可以'var code = e.keyCode || e.which' :) – pimvdb

+0

@ user893149 - 它适用于Opera 11.50,Firefox 5和Google Chrome 13。切断(在你的评论中) – 2011-08-13 15:33:17

0

原则上你应该这样做。看看这个:

<html> 
<head> 
<script type="text/javascript"> 
function check(e){ 
var keynum 
if(window.event) 
{ 
    keynum = e.keyCode 
} 
else if(e.which) 
{ 
    keynum = e.which 
} 
if(keynum=='32') 
{ 
    alert(keynum);} 
    } 
</script> 
</head> 
<form> 
<input type="text" onkeypress="check(event)" /> 
</form> 
</body> 
</html> 

看来你的缺乏反应是依赖于上下文的。

+0

那里有几个问题。 'if(window.event){keynum = event.keyCode}' 'if(keynum == 32)' – mplungjan

+0

我认为你是对的,我想我错误地调用了函数。 – Leo

+0

您的功能也可以使用! – Leo

3

我从来没有与任何问题,下面,我已经从至少9-13

function captureSpace (evt) { 
    var e = evt || event; 
    var code = e.keyCode || e.which; 
    if (code === 32) { 
     // Do your thing... 
    } 
} 

这将使用用它在IE6通过IE9,火狐3.5-5和Chrome逻辑或基本上说,如果evt是falsy值,然后使用window.event

var e = evt || event; 

它使用一个逻辑或分配的代码相同的方式

var code = e.keyCode || e.which; 

这给你一个真或假的值按该键,如果代码是正好等于32

(code === 32) 

整数值

我也建议你把它分配给键盘事件。

+0

'var e = evt ||事件;'到'var e = evt || window.event;'? – 2011-08-13 15:28:17

+0

事件是window.event的简写。尝试在IE浏览器中看到这个jsfiddle:http://jsfiddle.net/arcond/yVXy4/ –

+0

这个函数没有名字,我应该如何调用它? – Leo

0

要显示键的按下的unicode

  <script type="text/javascript"> 
       function displayunicode(e){ 
              var unicode=e.keyCode? e.keyCode : e.charCode; 
              alert(unicode); 
              } 
     </script> 
       <form> 
         <input type="text" size="2" maxlength="1" onkeyup="displayunicode(event); this.select()" /> 
       </form> 

Determining which key was pressed

+0

它也能工作,我只是加了IF! – Leo