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 [email protected]
Относно: 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 [email protected]
>
> Относно: 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: [email protected]
For additional commands, e-mail: [email protected]