mirror of
https://github.com/moodle/moodle.git
synced 2025-04-21 00:12:56 +02:00
MDL-38555 forms: Prevent same data submission multiple times.
This disables Submit button when the form has been submitted to prevent consequent submissions before the page has been loaded.
This commit is contained in:
parent
7112729206
commit
9f2f313e9f
9
lib/form/submit.js
Normal file
9
lib/form/submit.js
Normal file
@ -0,0 +1,9 @@
|
||||
M.form_submit = {};
|
||||
|
||||
M.form_submit.init = function(Y, options) {
|
||||
Y.on('submit', function(e) {
|
||||
if (!containsErrors) {
|
||||
e.target.one('#'+options.submitid).setAttribute('disabled', 'true');
|
||||
}
|
||||
}, '#'+options.formid);
|
||||
};
|
@ -38,6 +38,9 @@ require_once("HTML/QuickForm/submit.php");
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
class MoodleQuickForm_submit extends HTML_QuickForm_submit {
|
||||
/** @var string Need to store id of form for submission control in JS*/
|
||||
var $_formid = '';
|
||||
|
||||
/**
|
||||
* constructor
|
||||
*
|
||||
@ -60,6 +63,7 @@ class MoodleQuickForm_submit extends HTML_QuickForm_submit {
|
||||
{
|
||||
switch ($event) {
|
||||
case 'createElement':
|
||||
$this->_formid = $caller->getAttribute('id');
|
||||
parent::onQuickFormEvent($event, $arg, $caller);
|
||||
if ($caller->isNoSubmitButton($arg[0])){
|
||||
//need this to bypass client validation
|
||||
@ -98,4 +102,20 @@ class MoodleQuickForm_submit extends HTML_QuickForm_submit {
|
||||
$this->_flagFrozen = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns HTML for this form element.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function toHtml(){
|
||||
global $PAGE;
|
||||
$options = array(
|
||||
'submitid' => $this->getAttribute('id'),
|
||||
'formid' => $this->_formid,
|
||||
);
|
||||
$str = parent::toHtml();
|
||||
$module = array('name'=>'form_submit', 'fullpath'=>'/lib/form/submit.js');
|
||||
$PAGE->requires->js_init_call('M.form_submit.init', array($options), true, $module);
|
||||
return $str;
|
||||
}
|
||||
}
|
||||
|
@ -1955,6 +1955,7 @@ class MoodleQuickForm extends HTML_QuickForm_DHTMLRulesTableless {
|
||||
//<![CDATA[
|
||||
|
||||
var skipClientValidation = false;
|
||||
var containsErrors = false;
|
||||
|
||||
function qf_errorHandler(element, _qfMsg) {
|
||||
div = element.parentNode;
|
||||
@ -2063,6 +2064,7 @@ function validate_' . $this->_formName . '(frm) {
|
||||
var frm = document.getElementById(\''. $this->_attributes['id'] .'\')
|
||||
var first_focus = false;
|
||||
' . $validateJS . ';
|
||||
containsErrors = !ret;
|
||||
return ret;
|
||||
}
|
||||
//]]>
|
||||
|
Loading…
x
Reference in New Issue
Block a user