diff --git a/lib/Cake/Test/Case/View/Helper/FormHelperTest.php b/lib/Cake/Test/Case/View/Helper/FormHelperTest.php index 96d31385bfb..426220e1fb2 100644 --- a/lib/Cake/Test/Case/View/Helper/FormHelperTest.php +++ b/lib/Cake/Test/Case/View/Helper/FormHelperTest.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;'), diff --git a/lib/Cake/View/Helper/FormHelper.php b/lib/Cake/View/Helper/FormHelper.php index 46ccf369895..4bd76329cb8 100644 --- a/lib/Cake/View/Helper/FormHelper.php +++ b/lib/Cake/View/Helper/FormHelper.php @@ -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();