我有一个包含两个提交按钮的查找表单:取消并查找。它们在点击时都可以正常工作。但是按下回车键,总是会提交“取消”。我不想改变表单中按钮的顺序。我找到了一个解决方案来阻止提交“输入”。但是我想在输入时提交'find'。我写了一个JavaScript,当按下enter键时,它会调用find按钮的click动作。这有效,但仍会发送“取消”。
出了什么问题?
这是我的表格:
<?php echo $this->Form->create(null,array('onsubmit' => 'return submitOnEnter(this);')); ?>
<table>
<tr>
<td><?php echo $this->Form->input('Find.num',array('autofocus'));?></td>
</tr>
<tr>
<td><?php echo $this->Form->input('Find.name');?></td>
</tr>
<tr>
<td><?php echo $this->Form->input('Find.address');?></td>
</tr>
<tr><td align="right">
<?php echo $this->Form->submit('Cancel',array('id'=>'cancel','name'=>'cancel','onmousedown' => 'itsclicked = true; return true;','onkeydown' => 'itsclicked = true; return true;')); ?>
</td></tr>
<tr><td align="right">
<?php echo $this->Form->submit('Find',array('id'=>'find','name'=>'find','onmousedown' => 'itsclicked = true; return true;','onkeydown' => 'itsclicked = true; return true;','onClick'=>"alert('The button was clicked.');")); ?>
</td></tr>
</table>
<?php echo $this->Form->end(); ?>
这是JavaScript:
function submitOnEnter(form){
if(itsclicked){
return true;
}
document.getElementById('find').click();
return true;
}
'itsclicked'在页面加载时设置为false。
答案 0 :(得分:0)
请试试这个
这可能不是你问题的绝对答案,但这对你有很大帮助。
请使用以下代码取消按钮
<?php echo $this->Form->submit('Cancel',array('type'=>'button','id'=>'cancel','name'=>'cancel','onmousedown' => 'itsclicked = true; return true;','onkeydown' => 'itsclicked = true; return true;','onClick'=>"cancelFind();")); ?>
然后使用JavaScript函数进行取消操作:
function cancelFind(){
alert('Do what you want to do!');
}
使用以下代码进行查找操作:
function submitOnEnter(form){
alert('Do the find operation here!.');
}
由于
答案 1 :(得分:0)
您的问题与JavaScript无关,解决问题的方法不是使用JavaScript,而是要了解这些按钮的工作原理。
首次关闭echo $this->Form->submit(....
不会生成您希望生成的内容 - 它会返回 '可用于提交的元素,并重置表单 。请注意' 提交并重置 '。请在CakeAPI。
你说:
但是按回车键,总是提交“取消”
当然是 - 因为Cake会为你生成一个元素。
您可以使用 <button />
类型按钮 来缓解此问题。 ;)你可以这样做:
<table>
.....
.....
<tr>
<td align="right">
<button type="button" name="cancel" id="cancel">
</td>
</tr>
<tr><td align="right">
<?php echo $this->Form->submit('Find',.................... ?>
</table>
现在将点击处理程序附加到按钮类型的新按钮。在关注表单时,将始终在Enter上提交查找,因为它仍然是<input>
标记。
这是因为名为Browser (Window) Focus的东西。