如何让CakePHP发送第二个提交按钮时,按下enter


How to get CakePHP to send second submit button when pressing enter?

我有一个查找表单,有两个提交按钮:取消和查找。当它们被点击时,它们都可以正常工作。但是按回车键,总是'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>标签。这是因为所谓的浏览器(窗口)焦点。