You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测Mac系统两种删除键的keydown事件?解决Safari触发问题

解决Mac Safari中删除键不触发keydown事件的问题

哎,这可是Safari的经典坑了!我之前也遇到过一模一样的情况——Mac键盘上的两个删除键(向后删的Backspace、向前删的Forward Delete)在Safari里经常不会触发keydown或keypress事件。给你两个靠谱的解决办法:

方案一:改用input事件(强烈推荐)

input事件是专门用来监听输入框内容变化的,不管是打字、删除、粘贴、拖拽文本进来,甚至是语音输入,只要内容变了就会触发。它在所有浏览器(包括Safari)里表现都很稳定,而且覆盖的场景比只监听按键要全面得多。

把你的代码改成这样就行:

$(".panelText").on("input","textarea",function() {
  console.log("文本框内容已修改!");
  var textID = $(this).closest('.text').attr('id');
  $('#'+textID).find('.saveText').addClass('textChanged');
});

这个方案不仅解决了Safari删除键的问题,还能捕获用户所有可能修改文本的操作,让你的保存提醒功能更可靠。

方案二:兼容keydown的写法(如果必须保留keydown)

如果你一定要用keydown事件,可以通过检查按键的key属性来精准捕获删除键。在Safari中,Backspace键的key值是"Backspace",Forward Delete键的key值是"Delete",你可以在回调里加上判断:

$(".panelText").on("keydown","textarea",function(e) {
  // 检测两种删除键
  const isDeleteKey = e.key === "Backspace" || e.key === "Delete";
  
  // 对删除键或其他按键触发保存提醒
  if (isDeleteKey) {
    console.log("删除键被按下!");
    var textID = $(this).closest('.text').attr('id');
    $('#'+textID).find('.saveText').addClass('textChanged');
  } else {
    console.log("文本框内按键触发!");
    var textID = $(this).closest('.text').attr('id');
    $('#'+textID).find('.saveText').addClass('textChanged');
  }
});

不过要提醒你,有些旧版本的Safari可能还是不会为这两个键触发keydown事件,所以input事件的方案依然是更稳妥的选择。

内容的提问来源于stack exchange,提问作者Banjobum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:54:32