Bug 4054 - Double-clicking the 'place hold' button can result in duplicate holds
authorKyle M Hall <kyle@bywatersolutions.com>
Tue, 14 Feb 2012 15:53:19 +0000 (10:53 -0500)
committerPaul Poulain <paul.poulain@biblibre.com>
Fri, 17 Feb 2012 18:22:49 +0000 (19:22 +0100)
This commit adds a new jquery function to staff-global.js, preventDoubleFormSubmit().
When used thusly: $('#form-id').preventDoubleFormSubmit();
It will prevent a submitted form from being submitted a second time.
It is currently only added to the Place Hold form in reserve/request.pl

http://bugs.koha-community.org/show_bug.cgi?id=4045
Signed-off-by: Liz Rea <wizzyrea@gmail.com>
Tested:
Double clicking no longer causes identical double holds to be placed.
passes prove t xt t/db_dependent in line with current master.

Reminder: this will need to be added to the OPAC as well.

koha-tmpl/intranet-tmpl/prog/en/js/staff-global.js
koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt

index f491773..24b785d 100644 (file)
@@ -92,4 +92,13 @@ function checkEnter(e){ //e is event object passed from function invocation
 
 function clearHoldFor(){
        $.cookie("holdfor",null, { path: "/", expires: 0 });
-}
\ No newline at end of file
+}
+
+jQuery.fn.preventDoubleFormSubmit = function() {
+    jQuery(this).submit(function() {
+        if (this.beenSubmitted)
+            return false;
+        else
+            this.beenSubmitted = true;
+    });
+};
\ No newline at end of file
index 1719af4..fa45e26 100644 (file)
@@ -127,6 +127,8 @@ function checkMultiHold() {
                        $("#requestany").attr("checked","checked");
                }
        });
+
+    $('#hold-request-form').preventDoubleFormSubmit();
  });
 
 // ]]>
@@ -238,7 +240,7 @@ function checkMultiHold() {
   <fieldset class="rows left">
     <legend>Hold details</legend>
         [% UNLESS ( multi_hold ) %]
-            <form action="placerequest.pl" method="post" onsubmit="return check();" name="form">
+            <form action="placerequest.pl" method="post" onsubmit="return check();" name="form" id="hold-request-form">
         [% ELSE %]
             <form action="placerequest.pl" method="post" onsubmit="return checkMultiHold();" name="form">
         [% END %]