Javascript onclick而不是onfocus,或者通过函数触发onclick
我正在尝试制作一个AJAX页面,允许人们一次编辑一个字段并保存它。该页面是通过AJAX加载创建的,因此我不知道所有字段和DIV submit ID名称 但他们的想法是编辑一个字段,按enter键或单击Save,然后它就提供了一个发送DIV ID的函数 因此,如果有人点击,onfocus将调用该函数,这不是我想要的。而onclick只有在单击时才会运行,而foundNode.click是无法运行的;因此,它对treatenterastab的想法没有真正的帮助 有人能提供建议吗 谢谢 格雷格Javascript onclick而不是onfocus,或者通过函数触发onclick,javascript,dojo,onclick,onfocus,Javascript,Dojo,Onclick,Onfocus,我正在尝试制作一个AJAX页面,允许人们一次编辑一个字段并保存它。该页面是通过AJAX加载创建的,因此我不知道所有字段和DIV submit ID名称 但他们的想法是编辑一个字段,按enter键或单击Save,然后它就提供了一个发送DIV ID的函数 因此,如果有人点击,onfocus将调用该函数,这不是我想要的。而onclick只有在单击时才会运行,而foundNode.click是无法运行的;因此,它对treatenterastab的想法没有真正的帮助 有人能提供建议吗 谢谢 格雷格 关于焦
关于焦点事件,您可以防止事件冒泡以及执行其默认操作。换句话说,您可以捕获焦点事件,并让它执行您喜欢的任何动作或非动作。你问题的另一部分的答案是相似的 我个人只使用我自己的JavaScript库,所以我不能在dojo或任何其他库的上下文中帮助您,因为我没有任何使用它们的经验
也许你能再次围绕眼前的问题清晰地阐述一下上下文,帮助我可怜的大脑走出困境- 我已经更新了上面的代码,以显示更多的上下文。如果你运行它,你会对它有一个更好的想法。顺便说一句,示例代码并没有减少多少,所以它适用于我的更大的页面,其中有更多的输入字段,但它的工作方式是独立的。
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/dojo/1.5.0/dojo/dojo.xd.js" djConfig="parseOnLoad: true"></script>
<script type="text/javascript">
// Show and Hide the input element
function ShowHideFields(objName){
dojo.query("." + objName).forEach(function(node, index, arr){
console.debug(node.innerHTML);
var myTextField = dojo.byId(node);
if(myTextField.style.display == "none") {
myTextField.style.display = "block";
} else {
myTextField.style.display = "none";
}
});
}
// allow edit and save the data
function Edit(id) {
var task = id.substr(0, 4)
var id = id.substr(4)
if (task == "COMM"){
if(dojo.byId('discom' + id).style.display == 'none'){
dojo.byId('discom' + id).style.display = 'block';
dojo.byId('edicom' + id).style.display = 'none';
dojo.byId('COMM' + id).innderHTML = 'edit';
EditSave('discom' + id , 'edicom' + id, id );
} else if (dojo.byId('discom' + id).style.display == 'block') {
dojo.byId('discom' + id).style.display = 'none';
dojo.byId('edicom' + id).style.display = 'block';
dojo.byId('COMM' + id).innerHTML= 'save';
}
} else if (task == "NAME"){
if(dojo.byId('disnam' + id).style.display == 'none'){
dojo.byId('disnam' + id).style.display = 'block';
dojo.byId('edinam' + id).style.display = 'none';
dojo.byId('NAME' + id).innerHTML = 'edit';
EditSave('disnam' + id , 'edinam' + id, id );
} else if (dojo.byId('disnam' + id).style.display == 'block') {
dojo.byId('disnam' + id).style.display = 'none';
dojo.byId('edinam' + id).style.display = 'block';
dojo.byId('NAME' + id).innerHTML = 'save';
}
}
}
function EditSave(destination, source, id ){
//AJAX here, but for the sake of example this will work.
if(dojo.byId(destination) ) {
dojo.byId(destination).innerHTML = dojo.byId(source).value;
}
}
// capture the enter, and make it a tab to execute
function treatEnterAsTab(evt) {
if (evt.keyCode == dojo.keys.ENTER) {
var formElements = null;
if (formElements = dojo.query('*')) {
var foundNode = false;
for (var i = 0; i < formElements.length; i++) {
if (evt.target == formElements[i] && formElements[(i + 1)]) {
nextNode = formElements[(i + 1)];
foundNode = formElements[(i + 1)];
break;
}
}
if (foundNode && foundNode.focus) {
//set focus, but really set Click would be better.. Any ideas?
foundNode.focus();
}
}
}
}
// connect the key press event to the input boxes
dojo.addOnLoad(function(){
dojo.query("input").forEach(function(node, index, arr){
dojo.connect(dojo.byId(node),"keypress", treatEnterAsTab);
});
});
</script>
</head>
<body>
<div style="position: relative; float: left;">
<b style="float:left;">My Comment:</b><div id="disnam001" style="float:left; display: block;" > My Comment Here</div><input style="display:none; float:left;" id="edinam001" type="text" name="edinam001" value=" My Comment Here"/>
<div tabindex="0" onfocus="Edit(this.id);" id="NAME001" style="position: relative; float: right; margin-left: 10px; cursor:pointer; height:16px; padding: 0px 0px 0px 20px;" >edit</div>
</div>
</body>