【发布时间】:2021-04-19 06:01:26
【问题描述】:
我在这里创建了一个 JQuery 动态表,我正在尝试实施输入检查以确保只保存数字。通过在单元格外部单击或按 Enter 按钮来更新单元格,我想要实现的是在输入无效输入时发出警报。
“focusout”功能警报运行良好。另一方面,“按键”功能警报的行为很奇怪,警报消息正常弹出,但是无论我点击多少次都不会消失。
根据console.log(),警报以某种方式触发了“focusout”功能。但即使是这种情况,我也不明白这是如何导致错误的,因为“focusout”功能可以正常工作。我尝试在警报后使用 $(this).focus() 但这没有用。知道我可能缺少什么吗?
提前致谢
$(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 上下文。我正在使用 Handlebars 创建一个表格,但基本上我所有的单元格都是这样的..
<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>
我正在使用 JQuery 使单元格像这样可编辑...
/* Makes each cell on the table editable */
$(document).on('click', '.row_data', function (event) {
event.preventDefault();
if ($(this).attr('edit_type') === 'button') {
return false;
}
$(this).closest('span').attr('contenteditable', 'true');
$(this).css("background-color", "beige").css('padding', '5px');
$(this).focus();
})
【问题讨论】:
-
“无论我点击多少次,它都不会消失” - 那么它可能不是一个单一的警报,只是“不会消失” ,但它们是单独的警报,每次只显示相同的消息。假设此处涉及实际输入字段,您应该考虑使用
input事件而不是您现在尝试使用的两个 developer.mozilla.org/en-US/docs/Web/API/HTMLElement/… - 这应该可以避免您当前遇到的任何问题,因为警报导致字段失去焦点,再次触发另一个警报。 -
是
.row_data'输入的类吗? -
您的
alert正在触发focusout事件,它...创建另一个警报。始终使用console.log而不是alert来减轻这样的副作用。 -
是的 .row_data 是类。抱歉,我应该在上下文中包含我的 HTML
标签: javascript jquery alert