单击“确定”时JavaScript警报不会消失
我在这里创建了一个JQuery动态表,并尝试实现输入检查以确保只保存数字。通过在单元格外部单击或按enter按钮来更新单元格,我试图实现的是在输入无效输入时发出警报 “focusout”功能警报工作正常。另一方面,“按键”功能警报行为异常,警报消息会像正常情况一样弹出,但无论我单击“确定”多少次,它都不会消失 根据console.log()的说法,该警报以某种方式触发了“focusout”函数。但即使是这样,我也不明白这是如何导致错误的,因为“focusout”函数工作正常。我尝试在警报后使用$(this).focus(),但没有成功。知道我遗漏了什么吗 提前谢谢单击“确定”时JavaScript警报不会消失,javascript,jquery,alert,Javascript,Jquery,Alert,我在这里创建了一个JQuery动态表,并尝试实现输入检查以确保只保存数字。通过在单元格外部单击或按enter按钮来更新单元格,我试图实现的是在输入无效输入时发出警报 “focusout”功能警报工作正常。另一方面,“按键”功能警报行为异常,警报消息会像正常情况一样弹出,但无论我单击“确定”多少次,它都不会消失 根据console.log()的说法,该警报以某种方式触发了“focusout”函数。但即使是这样,我也不明白这是如何导致错误的,因为“focusout”函数工作正常。我尝试在警报后使用$
$(document).on('keypress', '.row_data', function (event) {
if (event.which === 13) {
event.preventDefault()
if (isNaN($(this).html())) {
alert("Enter valid number")
} else {
var elem = $(this)
saveValue(elem)
}
}
});
/* Saves the edited cell data when user clicks outside the cell */
$(document).on('focusout', '.row_data', function (event) {
event.preventDefault();
if (isNaN($(this).html())) {
alert("Enter valid number")
} else {
var elem = $(this)
saveValue(elem)
}
});
编辑
所以这里是我的HMTL的上下文。我用把手创建了一个表格,但基本上我所有的单元格都是这样的
<span class="row_data" edit_type="click" col_name="col_1">{{col_1}}</span>
</td>
<td>£
<span class="row_data" edit_type="click" col_name="col_2">{{col_2}}</span>
</td>
<td>£
<span class="row_data" edit_type="click" col_name="col_3">{{col_3}}</span>
</td>
您好,在这里使用HTML将有助于建议更好的解决方案,但简单的猜测是,您正在使用事件创建一个循环 您说过keypress事件是问题所在,只是出于测试目的,您尝试过将keypress更改为keydown/keyUp
此外,我建议将警报更改为console.log,以便于调试。嗨,在此处使用HTML将有助于建议更好的解决方案,但简单的猜测是,您正在创建一个包含事件的循环 您说过keypress事件是问题所在,只是出于测试目的,您尝试过将keypress更改为keydown/keyUp
我还建议将警报更改为console.log,以便于调试。我在下面对您的代码做了一些更改,并对其进行了完整的评论。最好不要在任何可能的情况下重复代码,只需使用各种方法维护单个函数和触发器,而不必确保分别维护两个不同的函数 您当前多次触发您的
警报
,我们可以将代码合理化一点,以避免触发警告的两个不同功能
我认为您可以通过以下方式简化:
$(":focus").blur();
这将从处于焦点的元素中移除焦点
我假设您的.row\u数据
是一个输入
,因此也使用了.val()
,而不是.html()
,您可能需要根据您的用例将其更改回去
如果你还希望得到别的东西,请告诉我
//我建议使用keyup而不是keypress
$(文档).on('keyup','row_data',函数(事件){
//检查是否是退货
if(event.which==13){
//消除焦点
//这将触发下面的函数,管理单个函数将更容易
$(':focus').blur();
//防止违约
event.preventDefault()
}
});
/*当用户在单元格外单击时保存编辑的单元格数据*/
$(文档).on('focusout','row_data',函数(事件){
//防止违约
event.preventDefault();
//检查NaN是否
//Used.val()-不确定是否需要在用例中使用.html
if(isNaN($(this.val())){
//通知用户
警报(“输入有效数字”)
}否则{
//传递要保存的元素
保存值($(此))
}
});
//测试保存功能
函数saveValue(elem){
//发送到控制台以证明其有效
log(“保存”+elem.val());
}
我在下面对您的代码做了一些更改,并对其进行了完整的评论。最好不要在任何可能的情况下重复代码,只需使用各种方法维护单个函数和触发器,而不必确保分别维护两个不同的函数 您当前多次触发您的
警报
,我们可以将代码合理化一点,以避免触发警告的两个不同功能
我认为您可以通过以下方式简化:
$(":focus").blur();
这将从处于焦点的元素中移除焦点
我假设您的.row\u数据
是一个输入
,因此也使用了.val()
,而不是.html()
,您可能需要根据您的用例将其更改回去
如果你还希望得到别的东西,请告诉我
//我建议使用keyup而不是keypress
$(文档).on('keyup','row_data',函数(事件){
//检查是否是退货
if(event.which==13){
//消除焦点
//这将触发下面的函数,管理单个函数将更容易
$(':focus').blur();
//防止违约
event.preventDefault()
}
});
/*当用户在单元格外单击时保存编辑的单元格数据*/
$(文档).on('focusout','row_data',函数(事件){
//防止违约
event.preventDefault();
//检查NaN是否
//Used.val()-不确定是否需要在用例中使用.html
if(isNaN($(this.val())){
//通知用户
警报(“输入有效数字”)
}否则{
//传递要保存的元素
保存值($(此))
}
});
//测试保存功能
函数saveValue(elem){
//发送到控制台以证明其有效
log(“保存”+elem.val());
}
“无论我单击确定多少次,它都不会消失”-因此很可能不是一个警报“不会消失”,而是单独的警报,每次只显示相同的消息。假设这里有实际的输入字段,你应该考虑使用<代码>输入<代码>事件,而不是你现在要使用的两个,这应该避免当前由于警告而失去焦点的任何问题。再次触发另一个警报。是输入的.row\u data'
类吗?您的警报
正在触发focusout
事件,该事件。。。创建另一个警报。始终使用console.log
而不是<