我有一个查找表单,有两个提交按钮:取消和查找。当它们被点击时,它们都可以正常工作。但是按回车键,总是'cancel'被提交。我不想改变表单中按钮的顺序。我找到了一个解决方案,以防止提交"进入"。但我希望在进入栏中有提交"查找"。我编写了一个JavaScript,在按下enter键时调用find按钮的click操作。这可以工作,但仍然发送'cancel'。
怎么了?
这是我的表单:
<?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
请尝试一下
这可能不是你问题的绝对答案,但这将对你有很大帮助。
请使用以下代码取消按钮
<?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!.');
}
谢谢
您的问题与JavaScript无关,解决它的方法是根本不使用JavaScript,而是了解这些按钮是如何工作的。
首先,echo $this->Form->submit(....
不会生成你期望它生成的东西——它返回'元素,这些元素可以用来提交和重置表单'。注意'submit and reset'。查看CakeAPI
你说:
但是按回车键,总是'cancel'被提交
当然是——因为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>
现在给button类型的新按钮附加一个点击处理程序。当聚焦表单时,Find将始终在Enter上提交,因为它仍然是一个<input>
标签。这是因为所谓的浏览器(窗口)焦点。