Thank you guys. With your help now it's working. If anyone is interested here 
is my final version (including code for confirmation): 
var Confirm = Class.create();
Confirm.prototype = 
{
        initialize: function(element, message) 
        {
                console.log("initialize -> " + element + " ---> " + message);
                
                this.alreadyClickedOnce = false;
                this.message = message;
                var el = $(element);
                var form = jQuery(el).closest("form");
                
                Event.observe(el, 'click', 
this.doConfirm.bindAsEventListener(this));
                
                var self = this;
                form.bind('submit', 
                                function() 
                                {
                                        if (self.clickOnceTimeout != null)
                                        {
                                                
window.clearTimeout(self.clickOnceTimeout);
                                        }
                                });
        },
        
        doConfirm: function(e) 
        {
                console.log("Clicked");
                
                if (this.alreadyClickedOnce)
                {
                        e.stop();
                        console.log("and cancelled");
                        return;
                }
                
                if(!confirm(this.message))
                {
                e.stop();
                return;
                }
                console.log("Confirmed");
                
                this.alreadyClickedOnce = true;
                
                var self = this;
                this.clickOnceTimeout = window.setTimeout(
                                function()
                                {
                                        console.log("Let them click again")
                                        self.alreadyClickedOnce = false;
                                }, 
                                3000);
        }
};
 






 -------- Оригинално писмо --------

От: Taha Siddiqi tawus.tapes...@gmail.com

Относно: Re: Confirm mixin with form validation errors

До: "Tapestry users"  

Изпратено на: Понеделник, 2012, Септември 17 13:40:26 EEST


Hi



You are using tapestry-jquery and trying to access a prototype library method. 
Try bind instead of observe



regards

Taha



On Sep 17, 2012, at 4:00 PM, ZKN __ wrote:



> 

> Thank you! 

> I tried to implement this but not much success for now. I'm not really good 
> at js and jQuery so perhaps I'm doing something wrong. 

> Here is my code 

> initialize: function(element)

> 

>        {

> 

> 

> var el = $(element);

> 

>               

> var form = jQuery(el).closest("form"); 
> form.observe(Tapestry.FORM_VALIDATE_EVENT, 

>                               function() 

>                               {

>                                       console.log("Hey, we're observing!");

> 

> ... 

> I get the following error: Uncaught exception: TypeError: 'form.observe' is 
> not a function

> 

> I have to mention I'm on a bit older version of Tapestry: 5.1.05. There is no

> Tapestry.FORM_VALIDATE_FIELDS_EVENT defined but there are

> Tapestry.FORM_VALIDATE_EVENT and 

> Tapestry.FIELD_VALIDATE_EVENT 

> which I guess should do the same thing. 

> 

> 

> 

> 

> 

> 

> -------- Оригинално писмо --------

> 

> От: Josh Canfield  joshcanfi...@gmail.com 

> 

> Относно: Re: Confirm mixin with form validation errors

> 

> До: Tapestry users  

> 

> Изпратено на: Петък, 2012, Септември 14 07:07:20 EEST

> 

> 

> I don't think this addresses the problem though, right?

> 

> 

> 

> If client-side form validation fails you still are in a state where you

> 

> can't click the submit button again after fixing the error.

> 

> 

> 

> Tapestry doesn't have an event for "validation failed", and I don't know of

> 

> an approved way to workaround that. But! What you can do is add an observer

> 

> for Tapestry.FORM_VALIDATE_FIELDS_EVENT and set a timeout (1/4 of a

> 

> second?) to re-enable the field if you don't get a

> 

> Tapestry.FORM_PREPARE_FOR_SUBMIT_EVENT before the timeout.

> 

> 

> 

> Here is a prototype based on Geoff's example from jumpstart. This was

> 

> created for submit buttons, you'd have to adjust for links (find the

> 

> form...)

> 

> 

> 

> ClickOnce = Class.create( {

> 

> 

> 

>    initialize: function(elementId) {

> 

>        var el = $(elementId);

> 

>        el.clickOnce = this;

> 

>        if ( el['form'] ) {

> 

>            el.form.observe(Tapestry.FORM_VALIDATE_FIELDS_EVENT, function()

> 

> {

> 

>                console.log("Hey, we're observing!");

> 

>                el.clickOnce.clickOnceTimeout =

> 

> window.setTimeout(function(){

> 

>                    console.log("Let them click again")

> 

>                    el.clickOnce.alreadyClickedOnce = false;

> 

>                }, 250)

> 

>            });

> 

> 

> 

>            el.form.observe(Tapestry.FORM_PREPARE_FOR_SUBMIT_EVENT,

> 

> function() {

> 

>                window.clearTimeout(el.clickOnce.clickOnceTimeout);

> 

>            });

> 

>        }

> 

>        this.alreadyClickedOnce = false;

> 

> 

> 

>        Event.observe(el, 'click',

> 

> this.doClickOnce.bindAsEventListener(this));

> 

>    },

> 

> 

> 

>    doClickOnce: function(e) {

> 

>        var element = Event.element(event);

> 

>        console.log("Clicked");

> 

>        if (element.clickOnce.alreadyClickedOnce) {

> 

>            console.log("and cancelled");

> 

>            e.stop();

> 

>        }

> 

>        element.clickOnce.alreadyClickedOnce = true;

> 

>    }

> 

> 

> 

> } );

> 

> 

> 

> 

> 

> // Extend the Tapestry.Initializer with a static method that instantiates a

> 

> ClickOnce.

> 

> 

> 

> Tapestry.Initializer.clickOnce = function(spec) {

> 

>    new ClickOnce(spec.elementId);

> 

> };

> 





---------------------------------------------------------------------

To unsubscribe, e-mail:  users-unsubscr...@tapestry.apache.org 

For additional commands, e-mail:  users-h...@tapestry.apache.org 



Reply via email to