按Enter键时如何让CakePHP发送第二个提交按钮?

时间:2014-03-10 10:38:04

标签: javascript php forms cakephp

我有一个包含两个提交按钮的查找表单:取消并查找。它们在点击时都可以正常工作。但是按下回车键,总是会提交“取消”。我不想改变表单中按钮的顺序。我找到了一个解决方案来阻止提交“输入”。但是我想在输入时提交'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。

2 个答案:

答案 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的东西。