Javascript 是否正在停止传播?

Javascript 是否正在停止传播?,javascript,jquery,Javascript,Jquery,使用遗留的.NET Web表单,我有一个场景,用户希望在给定的文本框中按enter键时计算值。这可以很好地工作,但是,回车键也会触发页面上的默认表单提交按钮 我试图通过将event.preventDefault()和return false添加到文本框的事件处理程序来绕过它,但是表单在事件发生之前提交,因此此代码没有影响 $("input[type='text']").keypress(function (event) { if (event.keyCode == 13) {

使用遗留的.NET Web表单,我有一个场景,用户希望在给定的文本框中按enter键时计算值。这可以很好地工作,但是,回车键也会触发页面上的默认表单提交按钮

我试图通过将
event.preventDefault()
return false
添加到文本框的事件处理程序来绕过它,但是表单在事件发生之前提交,因此此代码没有影响

$("input[type='text']").keypress(function (event) {
    if (event.keyCode == 13) {
        var regionId = $(this).attr("data-region-id");
        var subRegionId = $(this).attr("data-subregion-id");
        var multiplier = $(this).val();
        CalculateSales(regionId, subRegionId, multiplier);
        event.preventDefault();
        return false;
    }
});
在阅读了更多内容后,我了解到我可以将事件处理程序附加到默认表单,并使用
preventDefault()
来允许事件传播:

$("#form").on("keyup keypress", function(e) {
    var code = e.keyCode || e.which; 
    if (code  == 13) {               
        e.preventDefault();
    }
});

使用此方法,表单不会提交,但不会处理输入按键事件。如何确保表单未提交,但输入键也会计算值?

否,
preventDefault
不会停止传播。这两个函数具有完全不同的功能

stopPropagation
停止事件在事件链上的上升

preventDefault
在调用它的事件中阻止默认操作。但是,事件仍在链上传播

return false
与调用
preventDefault()和stopPropagation()等效。但是,调用函数是首选方法,因为您可以在函数开始时调用它们
return false
显然只能在最后使用,并且错误会阻止它运行

这就是为什么大多数时候你会同时使用这两个函数

这就是您的情况,您必须同时使用这两种方法

$("#form").on("keyup keypress", function(e) {
    var code = e.keyCode || e.which; 
    if (code  == 13) {               
        e.preventDefault();
        e.stopPropagation();
    }
});

我认为你正在寻找如果你想停止提交,也许你应该考虑这对我的作品在铬在小提琴:所以要恢复,你想防止形式提交时,<代码>返回< /代码>压在任何子输入????是否触发按键事件?你试着调试你的代码吗?
CalculateSales
做什么?您确定该函数实际上工作正常吗?在OP的评论之后,问题是关于未触发的事件。你被误导了,因为这个问题太糟糕了,标题不仅仅是标题。这也是“在阅读了更多内容后,我了解到我可以将事件处理程序附加到默认表单,并使用preventDefault()来允许事件的传播”。这是一个错误的陈述,所以我觉得有必要澄清一下。哦,是的,很多事情在讨论中似乎是错误的,错误的陈述/假设,没有足够的上下文,没有足够的调试信息,等等。。。