Hi,
You're right !!!
It works fine... Perfect, thank you so much. I though the fault was
comming from the innerHTML way, but I hasn't known about this next/
insert thing.
I think I'm not so good in JavaScript ;)
Just a test file : http://www.letroquet.eu/tests/module_inverse.html
Now, I have to modify all my code to implement this method.
Thank you.
I'll post a link to the site when it'll be finished...
Take care
On 6 nov, 15:24, "T.J. Crowder" <[EMAIL PROTECTED]> wrote:
> Hi,
>
> > Yes I know this possibility. I though about it, but I can not use
> > it... and I don't think the bind problem will be fix in that way ;)
>
> I'm pretty sure it will. Did you try it? I did a trivial test, and
> it worked fine. Here's my version of moveDown, which differs slightly
> from Rob's as it uses Prototype-isms:
>
> function moveDown(elm)
> {
> var next;
>
> elm = $(elm);
> next = elm.next();
> if (next)
> {
> elm.remove();
> next.insert({after: elm});
> }
>
> }
>
> That happily moves an element to after its next sibling, if it has
> one, retaining its event handlers. (IE6, FF3, Opera9, Safari 3 for
> Windows.) Complete example:http://pastie.org/308719
>
> The problem, as you correctly determined, is that when you use
> innerHTML, you're creating *new* element instances to represent the
> HTML. If you just move the elements around, you're not creating new
> instances, and the event handlers remain hooked up.
>
> If you really want to keep using your innerHTML approach, you'll have
> to unhook the handlers before moving things (memory leak otherwise),
> then re-hook them afterward. Note that when re-hooking them, you have
> to give the browser a moment to process them using Function.defer or
> some such; details on the unofficial
> wiki:http://proto-scripty.wikidot.com/prototype:tip-scripting-dynamically-...
>
> But much easier just to move them.
>
> HTH,
> --
> T.J. Crowder
> tj / crowder software / com
>
> On Nov 6, 1:35 pm, jak0lantash <[EMAIL PROTECTED]> wrote:
>
> > Hi,
>
> > Thank you for your respons.
> > Yes I know this possibility. I though about it, but I can not use
> > it... and I don't think the bind problem will be fix in that way ;)
> > Because, if in your example, if I take the module-0 code and put it
> > down between the 1 and 2. The binds will be broken too, aren't they ?
>
> > I explain, I wanna use these module on a page like that : at the left
> > side, several modules (3 per default), at the middle, just the web
> > pagen at the right side, several modules (3 per default). About
> > module, I mean a kind of widget.
> > For every actions on a module, I use two id to identify : a position
> > id and a module id.
> > The position id is use for every move action : down, up and delete. I
> > send an Ajax request. The PHP recognize the position, and the
> > concerned (with an array job) decide if the action is allowed, and
> > then the JavaScript finish the job.
> > The module id is use for every click or refresh action. The same thing
> > but to matter on the position.
> > At every moment, I have to now which module is at what position, in
> > PHP. Therefore, I have a div container for the position and a div
> > container for the module. So if I insert something somewhere, the
> > positions ids will be wrong...
> > I don't know if you understand what I wanna mean. Here is an example :
>
> > <div id="position-1"> <!-- BEGIN - div container for the position 1 --
>
> > <div id="module-A"> <!-- BEGIN - div container for the module A -->
> > text and javascript for the widget A
> > </div> <!-- BEGIN - div container for the module A -->
> > </div> <!-- BEGIN - div container for the module 1 -->
>
> > <div id="position-2"> <!-- BEGIN - div container for the position 2 --
>
> > <div id="module-B"> <!-- BEGIN - div container for the module B -->
> > text and javascript for the widget B
> > </div> <!-- BEGIN - div container for the module B -->
> > </div> <!-- BEGIN - div container for the module 2 -->
>
> > If I insert something between those two modules, the positions ids
> > will be wrong...
> > Do you understand ?
>
> > Thanks, bye
>
> > On 6 nov, 01:22, RobG <[EMAIL PROTECTED]> wrote:
>
> > > I think that your solution is way to complex for what you are doing.
> > > If all you want to do is swap the position of the divs, insert the one
> > > that you want to move down as the next sibling of the one below it (if
> > > there is one) - i.e. the nextSibilng of its nextSibling.
>
> > > e.g.
>
> > > <script type="text/javascript">
>
> > > function moveDown(el) {
> > > var div = el.parentNode;
> > > var nextSib = div.nextSibling;
> > > while (nextSib && nextSib.nodeType != 1) {
> > > nextSib = nextSib.nextSibling;
> > > }
> > > if (nextSib) {
> > > div.parentNode.insertBefore(div, nextSib.nextSibling);
> > > }
>
> > > }
>
> > > </script>
>
> > > <div id="container">
> > > <div id="module-0">
> > > <button onclick="moveDown(this);">Move Down A</button>
> > > </div>
>
> > > <div id="module-1">
> > > <button onclick="moveDown(this);">Move Down B</button>
> > > </div>
>
> > > <div id="module-2">
> > > <button onclick="moveDown(this);">Move Down C</button>
> > > </div>
> > > </div>
>
> > > --
> > > Rob
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---