On Nov 9, 7:40 am, Walter Lee Davis <[email protected]> wrote:
> On Nov 9, 2009, at 8:51 AM, ColinFine wrote:
>
>
>
>
>
> > On Nov 6, 7:14 pm, Rhiq <[email protected]> wrote:
> >> I'll try to explain what I am up to; feel free to slap me if I am
> >> really messing this up.
>
> >> I have a table that represents orders in a database, and it seems to
> >> be working fine.  When the user clicks on an order a div is updated
> >> using an Ajax.updater call.  This works well, the information is some
> >> html code that gives details of the order.  It includes an edit link,
> >> and when the user clicks this another Ajax.updater updates the same
> >> div - this time with a form.  That seems to work will to.
>
> >> Here is the problem that I am running into.  When the submit button  
> >> is
> >> clicked, I want the data to be saved and the div to by updated again
> >> with the refreshed order details.  I can't seem to come up with a way
> >> that works.
>
> > Do you mean that *instead* of doing an HTML submit (which always does
> > a GET or POST fetch of the whole page) you want to do an Ajax
> > operation which only refereshes the div?
>
> > In that case, don't use a 'submit' input at all: use a button (you can
> > call it 'submit' if you like) and observe it with a 'click'.
> > If you are concerned about getting all the inputs from from form, see
> > Form.serialize().
>
> There's a great shortcut method in Prototype: Form#request().[1] It  
> takes a normally-wired form and "hijacks" it to send via Ajax. Then  
> it's up to your server to return a lump of JavaScript to update the  
> DIV in question if the form was submitted via Ajax.
>
> It also follows the general usability guideline (dare I say RULE?)  
> that says -- first make it work, then make it pretty. By that I mean  
> that someone coming to your site without JavaScript should be able to  
> get along fine with everything you expect JavaScript to do, they just  
> won't have as "pretty" an experience of it. So your "click to load a  
> form" effect should lead to another page containing that form, and  
> your Ajax form submit should load back the original page with the  
> updated DIV in place, rather than just quietly updating the DIV  
> without a page refresh.
>
> So let's say you have injected a form into your page:
>
> <form action="form_handler.php" id="myForm" method="post">
> <input type="text" name="foo" value="<?=$foo?>" />
> <input type="submit" value="update" />
> </form>
>
> You would wire it to submit by Ajax thusly:
>
> $('myForm').observe('submit',function(evt){
>         evt.stop();
>         var div = this.up('div'); //or whatever you want to update
>         this.request({
>                 onComplete:function(transport){
>                         div.update(transport.responseText);
>                 },
>                 evalScripts:true
>         });
>
> });
>
> Request takes care of the parameters for you -- everything about the  
> form that is already set in the source will behave exactly the same  
> way, except that the form submission will happen over the Ajax pathway  
> rather than a normal submission.
>
>
>
>
>
> >> The other question I have is how to attach an observer to a
> >> dynamically created element - like my form?
>
> > Either include some Javascript in the HTML you send from the Ajax
> > request, to set up an event handler (use Element.observe() rather than
> > the HTML 'onClick' property - in this case you will need to set
> > 'evalScripts: true' in your Ajax.Updater options
>
> > Or, the better solution is to attache a handler to an element which
> > doesn't change (your <div> probably) and delegate handling.
>
> > If you say
>
> > $('mydiv').observe('click', function(ev) {
> >  var input = ev.findElement('input');
> >  if (input) ...
>
> > then any pick on your div, irrespective of how many times its contents
> > have changed, will call that function (which I've written inline, but
> > could be a named function), which will check whether the pick was
> > actually inside an <input> element - any <input> element - and if so
> > take action.
>
> Hope this helps,
>
> Walter
>
> 1.http://api.prototypejs.org/dom/form.html#request-class_method

Thanks!  Using the advice of both responders I was able to get it
working just how I wanted :D

n
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Prototype & script.aculo.us" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/prototype-scriptaculous?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to