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

如何在回车事件中获取按钮点击事件的Event对象?

问题分析与解决方案

你的核心问题是:回车触发的是keypress键盘事件,传递给logicTuoi_tinhTuoi的是键盘事件对象,而非按钮#tinhtuoi的click鼠标事件对象。如果$.fn.fireWorks(e)依赖鼠标事件的属性(比如pageX/pageY这类坐标信息),直接传键盘事件就会出问题。下面给两种可行方案:

方案一:直接触发按钮的点击事件(推荐)

不用手动传递事件对象,而是在回车时主动触发按钮的click事件,这样原有的点击事件处理逻辑会自动执行,同时传递正确的click事件对象。修改后的键盘事件代码如下:

$(document).on('keypress', '#divTinhTuoi', (e) => {
    if (e.which == 13){
        // 触发按钮的click事件,自动携带click事件对象
        $('#tinhtuoi').click();
        // 阻止回车的默认行为(比如避免表单自动提交)
        e.preventDefault();
    }
})

这种方式不需要修改logicTuoi_tinhTuoi函数,完全复用原有点击逻辑,最简洁。

方案二:构造模拟的click事件对象(按需使用)

如果不想触发按钮的点击事件,也可以手动构造一个类似click事件的对象,传递给logicTuoi_tinhTuoi。比如如果fireWorks只需要鼠标位置,可以取按钮的坐标来模拟:

$(document).on('keypress', '#divTinhTuoi', (e) => {
    if (e.which == 13){
        const btn = $('#tinhtuoi')[0];
        // 构造模拟的click事件对象
        const clickEvent = new MouseEvent('click', {
            pageX: btn.getBoundingClientRect().left + window.scrollX + btn.offsetWidth/2,
            pageY: btn.getBoundingClientRect().top + window.scrollY + btn.offsetHeight/2,
            bubbles: true,
            cancelable: true
        });
        // 传递模拟的事件对象
        $.fn.logicTuoi_tinhTuoi(clickEvent);
        e.preventDefault();
    }
})

这种方式适合需要自定义事件属性的场景,但代码相对繁琐,不如方案一简洁。

额外优化建议

如果logicTuoi_tinhTuoi函数里的fireWorks并不严格依赖完整的事件对象,只是需要触发位置,也可以重构函数,让它接受可选的位置参数,而不是直接依赖事件对象,这样兼容性更好。比如:

$.fn.logicTuoi_tinhTuoi = (eventOrPos) => {
    $('#tuoi').html($.fn.tinhTuoi())
    if (!~$('#tuoi').text().indexOf('Lỗi')){
        // 处理事件对象或位置参数
        const fireworkOpts = typeof eventOrPos === 'object' && 'pageX' in eventOrPos 
            ? eventOrPos 
            : {pageX: eventOrPos.x, pageY: eventOrPos.y};
        $.fn.fireWorks(fireworkOpts)
        $('#tuoi').effect('fade')
    }else $('#tuoi').effect('shake')
}

内容的提问来源于stack exchange,提问作者Hưng Nguyễn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 16:07:42