You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.6 KiB
47 lines
1.6 KiB
/** |
|
* Copyright 2013-2015, Facebook, Inc. |
|
* All rights reserved. |
|
* |
|
* This source code is licensed under the BSD-style license found in the |
|
* LICENSE file in the root directory of this source tree. An additional grant |
|
* of patent rights can be found in the PATENTS file in the same directory. |
|
* |
|
* @providesModule ReactDOMForm |
|
*/ |
|
|
|
'use strict'; |
|
|
|
var EventConstants = require("./EventConstants"); |
|
var LocalEventTrapMixin = require("./LocalEventTrapMixin"); |
|
var ReactBrowserComponentMixin = require("./ReactBrowserComponentMixin"); |
|
var ReactClass = require("./ReactClass"); |
|
var ReactElement = require("./ReactElement"); |
|
|
|
var form = ReactElement.createFactory('form'); |
|
|
|
/** |
|
* Since onSubmit doesn't bubble OR capture on the top level in IE8, we need |
|
* to capture it on the <form> element itself. There are lots of hacks we could |
|
* do to accomplish this, but the most reliable is to make <form> a |
|
* composite component and use `componentDidMount` to attach the event handlers. |
|
*/ |
|
var ReactDOMForm = ReactClass.createClass({ |
|
displayName: 'ReactDOMForm', |
|
tagName: 'FORM', |
|
|
|
mixins: [ReactBrowserComponentMixin, LocalEventTrapMixin], |
|
|
|
render: function() { |
|
// TODO: Instead of using `ReactDOM` directly, we should use JSX. However, |
|
// `jshint` fails to parse JSX so in order for linting to work in the open |
|
// source repo, we need to just use `ReactDOM.form`. |
|
return form(this.props); |
|
}, |
|
|
|
componentDidMount: function() { |
|
this.trapBubbledEvent(EventConstants.topLevelTypes.topReset, 'reset'); |
|
this.trapBubbledEvent(EventConstants.topLevelTypes.topSubmit, 'submit'); |
|
} |
|
}); |
|
|
|
module.exports = ReactDOMForm;
|
|
|