如何将最大长度设置为 HTML "td" 标签(单元格)?
How could I set a maxlength to an HTML "td" tag (cell)?
我有一个 HTML table 和 editable 单元格(我的 table 中的每个 td 标签都将“contenteditable”设置为 True) .
用户需要用 HH:mm 格式的时间填充 table,所以我添加了一个 onkeypress 属性,该属性触发一个函数来检查用户是否输入了数字以外的内容或":" 字符,如果是这样则忽略它,例如:
HTML
<td contenteditable="true" onkeypress="return isNumberKey(event)"> </td>
Javascript
function isNumberKey(evt){
let charCode = (evt.which) ? evt.which : event.keyCode;
if (charCode > 31 && (charCode < 48 || charCode > 57) && charCode!=58)
return false;
return true;
}
现在的问题是,用户可以输入超过 5 个字符,并写入诸如“345:678”之类的内容。
我想知道是否可以将他们可以在单元格中输入的字符数限制为 5 个(就像输入标签的“最大长度”属性一样),以及是否可以以某种方式限制用户输入两个数字,然后是一个“:”字符,然后是另外两个数字。 (即使设置最大长度已经很不错了)。
我还写了一个正则表达式来检查某些东西是否是 HH:mm 格式,但我认为它在这种情况下没有用,因为它只能在用户输入完整的五个字符后进行测试,对吗?
以防万一:
const timeRegex = RegExp("^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$");
这里是JSFiddle
如果您已经使用 javascript 检查用户可以将哪些字符输入到 td
,那么为什么不也将当前长度和其他字符的功能添加到也有功能吗?
F.e。像这样:
function isNumberKey(evt){
let charCode = (evt.which) ? evt.which : event.keyCode;
if (charCode > 31 && (charCode < 48 || charCode > 57) && charCode!=58)
return false;
var currentContent = evt.target.innerHTML;
if (currentContent.length >= 5)
return false;
if (currentContent.length === 2 && charCode !== 58)
return false;
return true;
}
我接受@Ekk4rd 的回答,因为他确实让我走上了正确的轨道,但我仍然想 post 一个答案,其完成的代码完全匹配 [=25] =] 我在问题中提出的问题。这是:
HTML
<td contenteditable="true" onkeypress="return isNumberKey(event)"> </td>
Javascript
function isNumberKey(evt){
let charCode = (evt.which) ? evt.which : event.keyCode;
console.log(evt.target.innerHTML);
if (evt.target.innerHTML == "<br>" || evt.target.innerHTML == " <br>"){
evt.target.innerHTML = "";
}
let currentContent = evt.target.innerHTML;
if (charCode > 31 && (charCode < 48 || charCode > 57) && charCode!=58){
return false;
}
if (currentContent.length >= 5){
return false;
}
if (currentContent.length === 2 && charCode !== 58){
return false;
}
if (currentContent.length != 2 && charCode == 58){
return false;
}
return true;
}
这里是JSFiddle
我有一个 HTML table 和 editable 单元格(我的 table 中的每个 td 标签都将“contenteditable”设置为 True) .
用户需要用 HH:mm 格式的时间填充 table,所以我添加了一个 onkeypress 属性,该属性触发一个函数来检查用户是否输入了数字以外的内容或":" 字符,如果是这样则忽略它,例如:
HTML
<td contenteditable="true" onkeypress="return isNumberKey(event)"> </td>
Javascript
function isNumberKey(evt){
let charCode = (evt.which) ? evt.which : event.keyCode;
if (charCode > 31 && (charCode < 48 || charCode > 57) && charCode!=58)
return false;
return true;
}
现在的问题是,用户可以输入超过 5 个字符,并写入诸如“345:678”之类的内容。
我想知道是否可以将他们可以在单元格中输入的字符数限制为 5 个(就像输入标签的“最大长度”属性一样),以及是否可以以某种方式限制用户输入两个数字,然后是一个“:”字符,然后是另外两个数字。 (即使设置最大长度已经很不错了)。
我还写了一个正则表达式来检查某些东西是否是 HH:mm 格式,但我认为它在这种情况下没有用,因为它只能在用户输入完整的五个字符后进行测试,对吗?
以防万一:
const timeRegex = RegExp("^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$");
这里是JSFiddle
如果您已经使用 javascript 检查用户可以将哪些字符输入到 td
,那么为什么不也将当前长度和其他字符的功能添加到也有功能吗?
F.e。像这样:
function isNumberKey(evt){
let charCode = (evt.which) ? evt.which : event.keyCode;
if (charCode > 31 && (charCode < 48 || charCode > 57) && charCode!=58)
return false;
var currentContent = evt.target.innerHTML;
if (currentContent.length >= 5)
return false;
if (currentContent.length === 2 && charCode !== 58)
return false;
return true;
}
我接受@Ekk4rd 的回答,因为他确实让我走上了正确的轨道,但我仍然想 post 一个答案,其完成的代码完全匹配 [=25] =] 我在问题中提出的问题。这是:
HTML
<td contenteditable="true" onkeypress="return isNumberKey(event)"> </td>
Javascript
function isNumberKey(evt){
let charCode = (evt.which) ? evt.which : event.keyCode;
console.log(evt.target.innerHTML);
if (evt.target.innerHTML == "<br>" || evt.target.innerHTML == " <br>"){
evt.target.innerHTML = "";
}
let currentContent = evt.target.innerHTML;
if (charCode > 31 && (charCode < 48 || charCode > 57) && charCode!=58){
return false;
}
if (currentContent.length >= 5){
return false;
}
if (currentContent.length === 2 && charCode !== 58){
return false;
}
if (currentContent.length != 2 && charCode == 58){
return false;
}
return true;
}
这里是JSFiddle