使用事件.用来验证用户按下空格键是否在Firefox中不起作用
Using event.which to verify if the user pressed the spacebar doesn't work in Firefox
我想要一个脚本来验证按下的键是否为'空格键',keycode 32。我注意到IE使用了其他函数名。
我尝试了很多解决方案,发现这里和这个:
event = event || window.event // IE does not pass event to the function
if(event == window.event){
code = event.keyCode;
}else{
code = event.which;
}
if(code == '32') {}
但在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"中搜索。当用户找到想要的数据时,他必须按空格键将数据插入文本区,并以']]'结束,但这在Firefox中不起作用。
(是的,我使用JavaScript和jQuery以完全错误的方式使用相同的元素,因为我不太擅长这个,我会在Firefox工作后尝试纠正它)
EDIT
html:<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发布的内容
我从来没有遇到过以下问题,我在IE6到IE9, Firefox 3.5-5和Chrome至少9-13中使用过它
function captureSpace (evt) {
var e = evt || event;
var code = e.keyCode || e.which;
if (code === 32) {
// Do your thing...
}
}
使用逻辑或表示如果evt
是假值,则使用window.event
var e = evt || event;
使用逻辑或以相同的方式为按下的键分配代码
var code = e.keyCode || e.which;
如果代码正好等于32
的整数值,则给出一个true或false值(code === 32)
我还建议您将此分配给键UP事件。
原则上,您这样做应该是可行的。看看这个:
<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>
显示按下的键的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>
确定按了哪个键
相关文章:
- 是否可以从在Firefox或IE的网页中运行的Javascript启动Windows进程
- 是否可以从 Firefox 运行 bash 脚本?(使用 Firefox 附加组件 SDK)
- 如何检查Firefox是否使用asm.js代码
- 如何检测firefox中是否可以访问剪贴板
- Firefox是否支持enablePrivilege(“UniversalBrowserRead”)
- 通过注册表安装的Firefox插件是否可以使用updateURL
- 是否可以在FireFox/Safari中创建多个WebSocket
- 如何检测是否安装了firefox扩展
- 检测样式表是否无法加载(在 Firefox 上不起作用)
- 是否可以创建一个 Firefox 插件,在网页上生成一个或多个点击事件
- 在 OSX 上的 Firefox 中是否支持 nslProcess
- 是否可能在IE8+的浏览器窗口中打开.js文件(就像Firefox一样)
- 如何在 Firefox 上使用 Selenium IDE 来测试是否存在滚动条
- Firefox vs. Firefox Mobile (Fennec):是否有JavaScript可检测的差异
- Firefox中的JSON.parse是否存在错误
- Firefox操作系统模拟器中的Uint8Array/Uint16Array转换是否已中断
- 检测私人浏览器会话是否在使用Javascript的Firefox上
- 当从Firefox插件在页面中注入js时,是否可以绕过CSP
- Firefox API检查选项卡是否处于活动状态
- 如何检查是否从Firefox扩展激活了Javascript