Permalink
Browse files

Fix create() and onsubmit option.

Removing support for onSubmit variant.  Additional
choices are not necessary. Fixing onsubmit option
not correctly working.
Fixes #1977
  • Loading branch information...
1 parent 3c8c293 commit 6ab59a447c6affe62dc9a916f3e7ef6b00414ca0 @markstory markstory committed Sep 8, 2011
Showing with 23 additions and 8 deletions.
  1. +16 −2 lib/Cake/Test/Case/View/Helper/FormHelperTest.php
  2. +7 −6 lib/Cake/View/Helper/FormHelper.php
@@ -6074,6 +6074,14 @@ public function testCreate() {
);
$this->assertTags($result, $expected);
+ }
+
+/**
+ * Test the onsubmit option for create()
+ *
+ * @return void
+ */
+ public function testCreateOnSubmit() {
$this->Form->request->data = array();
$this->Form->request['controller'] = 'contacts';
$this->Form->request['models'] = array('Contact' => array('plugin' => null, 'className' => 'Contact'));
@@ -6092,11 +6100,17 @@ public function testCreate() {
$this->Form->request->data = array();
$this->Form->request['controller'] = 'contacts';
$this->Form->request['models'] = array('Contact' => array('plugin' => null, 'className' => 'Contact'));
- $result = $this->Form->create(array('url' => array('action' => 'index', 'param'), 'default' => false, 'onsubmit' => 'someFunction();'));
+ $result = $this->Form->create(array(
+ 'url' => array('action' => 'index', 'param'),
+ 'default' => false,
+ 'onsubmit' => 'someFunction();'
+ ));
$expected = array(
'form' => array(
- 'id' => 'ContactAddForm', 'method' => 'post', 'onsubmit' => 'someFunction(); event.returnValue = false; return false;', 'action' => '/contacts/index/param',
+ 'id' => 'ContactAddForm', 'method' => 'post',
+ 'onsubmit' => 'someFunction();event.returnValue = false; return false;',
+ 'action' => '/contacts/index/param',
'accept-charset' => 'utf-8'
),
'div' => array('style' => 'display:none;'),
@@ -302,7 +302,9 @@ public function tagIsInvalid() {
* - `action` The controller action the form submits to, (optional).
* - `url` The url the form submits to. Can be a string or a url array. If you use 'url'
* you should leave 'action' undefined.
- * - `default` Allows for the creation of Ajax forms.
+ * - `default` Allows for the creation of Ajax forms. Set this to false to prevent the default event handler.
+ * Will create an onsubmit attribute if it doesn't not exist. If it does, default action suppression
+ * will be appended.
* - `onsubmit` Used in conjunction with 'default' to create ajax forms.
* - `inputDefaults` set the default $options for FormHelper::input(). Any options that would
* be set when using FormHelper::input() can be set here. Options set with `inputDefaults`
@@ -421,19 +423,18 @@ public function create($model = null, $options = array()) {
unset($options['type'], $options['action']);
if ($options['default'] == false) {
- if (isset($htmlAttributes['onSubmit']) || isset($htmlAttributes['onsubmit'])) {
- $htmlAttributes['onsubmit'] .= ' event.returnValue = false; return false;';
- } else {
- $htmlAttributes['onsubmit'] = 'event.returnValue = false; return false;';
+ if (!isset($options['onsubmit'])) {
+ $options['onsubmit'] = '';
}
+ $htmlAttributes['onsubmit'] = $options['onsubmit'] . 'event.returnValue = false; return false;';
}
+ unset($options['default']);
if (!empty($options['encoding'])) {
$htmlAttributes['accept-charset'] = $options['encoding'];
unset($options['encoding']);
}
- unset($options['default']);
$htmlAttributes = array_merge($options, $htmlAttributes);
$this->fields = array();

0 comments on commit 6ab59a4

Please sign in to comment.