【问题标题】:Adding onchange event to FormHelper forms将 onchange 事件添加到 FormHelper 表单
【发布时间】:2013-03-28 21:52:31
【问题描述】:

我有一个充满复选框的表单,我正在尝试通过 AJAX 更新表单选项(因为选择了一个选项,其他选项受到限制)。我通过提交按钮完成了这项工作,但我想为选择框完成 onchange 。 (是的,我知道提交表单是一种不寻常的用法)。

我尝试将 onchange 添加到输入的属性数组,但它不起作用。标签,类等其他东西都可以很好地应用,但 onchange 没有。这是复选框列表之一:

echo $this->Form->input('Sale.LocationID', array(
        'label' => 'LocationID:',
        'options'=>$locations,
        'multiple' => 'checkbox',
        'onchange'=>"this.form.submit()",
        ));

有没有办法以 CakePHP 标准方式向我的复选框添加 onchange 事件,或者我必须在没有 Formhelper 的情况下构建复选框来做到这一点?

【问题讨论】:

  • 你确定不是吗?我刚刚在我的应用程序中尝试了您的代码,它添加了 onchange 代码就好了。 (我在 2.3.1,但我认为这不会影响任何事情)
  • @Dave onchange 在 HTML 中的什么位置结束了?我没有看到从父 div 到输入标签的任何地方,也没有看到它

标签: javascript cakephp forms cakephp-2.2


【解决方案1】:

使用内联事件处理效率不是很高,你有没有考虑过使用jQuery和事件委托?

在视图文件的末尾;

// Using 'heredoc' here so we don't have to escape quotes
$script = <<< JS

    // this will handle click events on any checkbox on the page
    $(document).on("click", "input[type='checkbox']", function(){
        // or AJAX post here
        this.form.submit();
    });
JS;  // note: must be at the start of the line, no space before JS

// Append the script to the buffer
$this->Js->buffer($script);

就在布局内部之前(例如 default.ctp)

// output the JavaScript buffer
echo $this->Js->writeBuffer();

【讨论】:

  • 这是实际上是一个更好的主意,不知道为什么我没有想到它......我已经在其他表单上这样做了。
  • Hrm 它不通过 AJAX 提交,而我的提交按钮是这样做的;这是不同的功能吗?
  • 你是如何实现你的 AJAX 提交的?您需要在点击处理程序中执行 AJAX 提交,或者确保取消“常规”表单提交并改为执行 AJAX 提交
  • 没关系,找到我需要使用的功能。太习惯了Cake的Js->提交函数忘了怎么自己做函数了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-21
  • 2015-10-16
  • 2016-08-05
  • 1970-01-01
  • 2023-03-25
  • 2023-03-06
  • 1970-01-01
相关资源
最近更新 更多