我制作了一个包含复选框和小输入字段的表单。我制作了一个脚本来做两件事:
什么不起作用: *当用户键入文本字段时,复选框不会立即显示(通常会单独键入2个键),即使逻辑说调用时,如果取消选中该复选框,请检查它。 *当用户清除文本区域时,使用退格/删除/等,复选框保持不变。
工作原理:
Here is the related coding being run on JSFiddle
function autocheck(ElementName, SectionName) {
//window.alert('keyword-' + SectionName + '-' + ElementName.toLowerCase());
if (document.getElementById('keyword-' + SectionName + '-' + ElementName.toLowerCase()).checked == false)
{
document.getElementById('keyword-' + SectionName + '-' + ElementName.toLowerCase()).checked = true
}
if (document.getElementById('keyword-' + SectionName + '-entry-' + ElementName.toLowerCase()).value == '')
{
document.getElementById('keyword-' + SectionName + '-' + ElementName.toLowerCase()).checked = false;
}
}
function autofill(ElementName, SectionName) {
ElementName=ElementName.replace(" ", "-");
//window.alert('You got this: ' + ElementName);
if(document.getElementById('keyword-' + SectionName + '-' + ElementName.toLowerCase()).checked == true)
{
document.getElementById('keyword-' + SectionName + '-entry-' + ElementName.toLowerCase()).value = document.getElementById('keyword-' + SectionName + '-' + ElementName.toLowerCase()).value;
} else {
document.getElementById('keyword-' + SectionName + '-entry-' + ElementName.toLowerCase()).value = '';
}
}
这是相关的HTML
<input type="checkbox" name="ufs_split_keywords[]" value="Throw" id="keyword-split-throw" onclick="autofill(this.value, 'split');"> <label for="keyword-split-throw">Throw</label>
<br>
<input type="text" name="ufs_split_keywords_entry[]" id="keyword-split-entry-throw" style="width:100px; float: right;" onkeydown="autocheck('throw', 'split');">
答案 0 :(得分:3)
使用onkeyup代替onkeydown!
因为你只会获得字段的更改值。
在keydown-event的时间点,输入的值将是旧的/不变。
记住按键的基本生命周期:
This fiddle完美适合我。 (只有 onkeydown 的代码更改为 onkeyup )
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
function autocheck(ElementName, SectionName) {
//window.alert('keyword-' + SectionName + '-' + ElementName.toLowerCase());
if (document.getElementById('keyword-' + SectionName + '-' + ElementName.toLowerCase()).checked == false)
{
document.getElementById('keyword-' + SectionName + '-' + ElementName.toLowerCase()).checked = true
}
if (document.getElementById('keyword-' + SectionName + '-entry-' + ElementName.toLowerCase()).value == '')
{
document.getElementById('keyword-' + SectionName + '-' + ElementName.toLowerCase()).checked = false;
}
}
function autofill(ElementName, SectionName) {
ElementName=ElementName.replace(" ", "-");
//window.alert('You got this: ' + ElementName);
if(document.getElementById('keyword-' + SectionName + '-' + ElementName.toLowerCase()).checked == true)
{
document.getElementById('keyword-' + SectionName + '-entry-' + ElementName.toLowerCase()).value = document.getElementById('keyword-' + SectionName + '-' + ElementName.toLowerCase()).value;
} else {
document.getElementById('keyword-' + SectionName + '-entry-' + ElementName.toLowerCase()).value = '';
}
}
</script>
</head>
<body>
<input type="checkbox" name="ufs_split_keywords[]" value="Throw" id="keyword-split-throw" onclick="autofill(this.value, 'split');"> <label for="keyword-split-throw">Throw</label>
<br>
<input type="text" name="ufs_split_keywords_entry[]" id="keyword-split-entry-throw" style="width:100px; float: right;" onkeyup="autocheck('throw', 'split');">
</body>
</html>