1

我已经编写了一个代码来处理鼠标和键盘事件。但是该onkeypress事件在 Firefox、IE 等中没有触发。我也尝试过使用keydown事件,但这不起作用。li元素的 HTML 代码是:

print "<li class=\"ui-menu-item \" id=\"toli$i\"  value=\"'$name','$email'\" role=\"menuitem\"><a class=\"ui-corner-all\" href=\"#\"  onkeypress=\"keyhandle('$name','$email');\" onclick=\"fillto('toli$i','$name','$email');\">$ename $ediv $email></a></li>";
    }
    elsif($field eq "cc"){

 print "<li class=\"ui-menu-item \" id=\"toli\" role=\"menuitem\"><a class=\"ui-corner-all\" href=\"#\" onkeypress=\"keyhandle('$name','$email');\" onclick=\"fillcc('$name','$email');\">$ename $ediv $email></a></li>";
}
elsif($field eq "bcc"){

 print "<li class=\"ui-menu-item \" id=\"toli\" role=\"menuitem\"><a class=\"ui-corner-all\" href=\"#\" onkeypress=\"keyhandle('$name','$email');\" onclick=\"fillbcc('$name','$email');\">$ename $ediv $email></a></li>";
}
}
print "</ul>";

javascript函数是

<script language="javascript">
function keyhandle(id,name,email){

alert (id);
 }
</script>

事件onclick正在触发,但onkeypress没有触发。谁能建议这是为什么?

提供给浏览器的代码是

<div id="displayto" class="display ui-widget"><ul class="ui-autocomplete ui-menu ui-widget-content ui-corner-all " style="width: 550px; max-height: 200px;" aria-activedescendant="ui-active-menuitem" role="listbox"><li class="ui-menu-item " id="toli1" value="'AMAL SMITHA S','amal_smitha@vssc.gov.in'" role="menuitem"><a class="ui-corner-all" href="#" onkeypress="keyhandle('AMAL SMITHA S','amal_smitha@vssc.gov.in');" onclick="fillto('toli1','AMAL SMITHA S','amal_smitha@vssc.gov.in');">"AMAL SMITHA S" (COM) &lt; amal_smitha@vssc.gov.in&gt;</a></li></ul></div>

我试过代码

 $(document).ready(){
        $("#displayto").keypress(function(){
            alert('a');
    });
} 

但它也不起作用。我给每个人一个连续的 id

  • 物品。我想通过按键函数传递这个顺序 ID。这个 id 值用于在“向下”箭头按下时获取下一个 id 值,在向上箭头按下时获取上一个值。如果按下回车键,则调用 fillto() 函数。此代码用于自动完成功能。有没有其他方法可以做到这一点?请帮助解决这个问题。

  • 4

    3 回答 3

    6

    这可能有点太晚了,但现在我正在处理同样的问题并且可能找到了解决方案。

    我的情况是:

    <span onclick="javascript: /* some javascript to select element */ " onkeypress="javascript: /* call function to process key event */">...</span>
    

    我在某处发现要使元素能够捕获关键事件,它需要是可聚焦的。默认情况下,所有输入元素都应该是可聚焦的,也许其他一些元素也是可聚焦的,因浏览器而异。

    但是,您可以使元素具有焦点,在我的例子中,我使用tabindex属性来实现这一点。像这样:

    <span tabindex="" onclick="javascript: /* some javascript to select element */ " onkeypress="javascript: /* call function to process key event */">...</span>
    

    这在 Firefox 中有效,但在 Chrome 中无效。只有当我将一些值放入 tabindex 属性时,该事件才会被实际触发并执行 onkeypress="" 中的 javascript。

    所以现在我得到了这样的结果:

    <span tabindex="0" onclick="javascript: /* some javascript to select element */ " onkeypress="javascript: /* call function to process key event */">...</span>
    

    编辑:我忘了补充一点,你实际上需要关注元素。我通过调用 focus() 在 onclick="" 中做到了这一点。

    于 2012-11-15T19:59:41.457 回答
    0

    你可以使用 jQuery 吗?如果可以的话,尝试这样的事情,我认为可能会更好:

    $(document).ready(){
        $("#displayto").keypress(function(){
            alert('a');
        });
    }//end of document ready
    
    于 2012-04-16T20:31:27.267 回答
    0

    可能事件是在输入之前加载的,这就是为什么不工作,试试现场,

    $(document).ready(){
    
            $('input').live('keypress', function (e) {
               if ( e.keyCode == 9 ){
                   alert( 'Tab pressed' );
                }else
                  alert("another key pressed");
            });
    }
    

    如果您不使用输入标签,请尝试使用您正在使用的标签,例如 div 的 id

    于 2012-04-17T14:58:17.553 回答