Ok, I''ve got some link_to_remote stuff working elsewhere just fine, but this time it''s doing something very screwy. Here''s the view code to create a link to remotely toggle a boolean value on a record: <td class="contact_active"> <%= link_to_remote "<div id=''contact_active_#{cm.id}''><span class=''#{cm.active}''>#{cm.active}</span></div>", { :update => "contact_active_#{cm.id}", :url => {:action => "toggle_contact_method", :id => cm.id} } %> </td> There''s quite a mess of embedded tags and quotes there, but I think it''s all correct and it does generate the correct html initially. The span element inside the div is what''s getting replaced. The remote call renders a string containing a span element with the toggled value and a css class reference to match: def toggle_contact_method cm = ContactMethod.find(params[:id]) cm.toggle(''active'') render_text "<span class=''#{cm.active}''>#{cm.active}</span>" end However, for some reason in the replacement an extra anchor tag is being generated. Original: <div id="contact_active_12"><span class="true">true</span></div> After AJAX replacement: <div id="contact_active_12"><span class="false"><a>false</a></span></div> I have no idea where the hell it gets that extra anchor tag, so any insightful observations would be appreciated. -- Posted via http://www.ruby-forum.com/.
You can''t update DOM elements in a table. I have made this sort of thing work by embedding a table within the table. It wasnt pretty but is was the best I could come up with at the time. Anyone else got any suggestions? G -- Posted via http://www.ruby-forum.com/.
Gareth Reeves wrote:> You can''t update DOM elements in a table.Well, that''s a really crappy, arbitrary limitation. I don''t know how that explans the output, though. In any case, does anybody have any more suggestions for how to make something like this work? Am I going to have to build the tables out of css blocks? -- Posted via http://www.ruby-forum.com/.
Ryan, can you run the template, view source and past the output HTML here for us to take a look at? -- Posted via http://www.ruby-forum.com/.
hey Ryan - I feel your pain! I have faced the same issue - autocompletes just not working (no feedback, nothing), divs not updating etc. For this reason I''ve been rolling over my tables to divs. I''ve got more than 25 really huge entry screens, and it sucks, so I''m just transitioning in. In the end I''m much happier - the code is cleaner and tables are a little easier for me now. Since having moved to divs, I''m not experiencing any flakiness with prototype or sc.ript.uclo.us (sp? always get that one wrong) Here''s the usage: <div class="striped_table"> <div class="even_row"> <div class="column"> </div> <div class="column"> </div> <BR clear="all"/> </div> <div class="odd_row"> <div class="column"> </div> <div class="column"> </div> <BR clear="all"/> </div> </div> ------- CSS -------- div.striped_table { position:relative; z-index:1; font-family: "lucida grande", verdana, sans-serif; font-size: 9pt; width: 100%; } div.striped_table div.even_row { width: 100%; background-color: #edf3fe; padding-bottom: 5px; padding-top: 5px; } div.striped_table div.odd_row { width: 100%; background-color: #fff; padding-bottom: 5px; padding-top: 5px; } div.striped_table div.title_row { width: 100%; font-family: "lucida grande", verdana, sans-serif; font-size: 9pt; text-transform:uppercase; text-decoration:none; background-color: #fff; padding-bottom: 5px; padding-top: 5px; } div.striped_table div.selected { background-color: #FFFFCC; padding-bottom: 5px; padding-top: 5px; } div.striped_table .column { width: 0%; padding:0px; float:left; } ------- CSS -------- On 16-Mar-06, at 4:05 PM, Cody Skidmore wrote:> Ryan, can you run the template, view source and past the output HTML > here for us to take a look at? > > -- > Posted via http://www.ruby-forum.com/. > _______________________________________________ > Rails mailing list > Rails@lists.rubyonrails.org > http://lists.rubyonrails.org/mailman/listinfo/rails
I seem to have had more success with this than I should. Indeed, I banged my head against a wall the other day trying to figure out why a link (for cancelling) was working, but a form submit (for editing) was not. I ultimately discovered that the problem was utterly and completely me, I mispelled the token :update in the form_remote_tag, but not in the link_to_remote. Most of what I was doing was straightforward replacements of existing DOM elements, in particular, TR tag elements. I have noticed some pretty freaky things happening with different browsers on insertions and deletions. However, given the last experience, I still don''t doubt that the problem is me. On Mar 16, 2006, at 1:20 PM, Gareth Reeves wrote:> You can''t update DOM elements in a table. I have made this sort of > thing > work by embedding a table within the table. It wasnt pretty but is was > the best I could come up with at the time. > > Anyone else got any suggestions? > > G > > > -- > Posted via http://www.ruby-forum.com/. > _______________________________________________ > Rails mailing list > Rails@lists.rubyonrails.org > http://lists.rubyonrails.org/mailman/listinfo/rails
Thanks, Jodi! I''m probably going to try something like that. Andrew: Still being relatively new to this I initially suspected that I did something wrong, but I sure can''t see anything wrong with my code in this case. It seems pretty straightforward to me: I tell the link_to_remote to replace the div, my very simple remote function returns a span with a value in it, and somehow an <a> tag also gets stuck in the response. Crazy. Cody: the page is quite large including all the form selectors and stuff. I really shouldn''t post it here. That one before-and-after element I pasted is really the only relevant portion of the output, I just didn''t paste the whole table that contains it (just a simple 3-column table with usually 1-5 rows). -- Posted via http://www.ruby-forum.com/.
that''s not true. i currently do much the same thing... <td><input type="checkbox" id="active_flag_<%= user.id -%>" name="active_flag_<%= user.id -%>" value="<%= user.id -%>" <%= user.active? ? "checked" : "" -%> onclick="activate_user(this)"/> <label id="user_<%= user.id -%>_label" for="active_flag_<%= user.id %>"><%user.active? ? "Active" : "<b>Inactive</b>" -%></label></td> and mine''s even more disturbing than Ryan''s example! :) anyways, i update the label tag in that mess. clicking on the checkbox calls a js function: function activate_user(cb) { var status = (cb.checked) ? "1" : "0"; data = "id=" + cb.value + "&af=" + status var myAjax = new Ajax.Request(''/admin/users/activate'', {method: ''post'', parameters: data}); } this js calls the activate action and the view is an rjs template if @params[:af] == "1" page.visual_effect :highlight, "user_#{@params[:id]}", { :startcolor => "''#aaffaa''" } page.replace_html "user_#{@params[:id]}_label", "Active" else page.visual_effect :highlight, "user_#{@params[:id]}", { :startcolor => "''#ffaaaa''" } page.replace_html "user_#{@params[:id]}_label", "<b>Inactive</b>" end so what happens here, is when a box is checked/unchecked, the user account gets activated/inactivated on the backend, the label next to the checkbox gets changed to Active/Inactive and the row in the table gets highlighted green/red. works fine. Chris On 3/16/06, Gareth Reeves <reevesg@pobox.com> wrote:> > You can''t update DOM elements in a table. I have made this sort of thing > work by embedding a table within the table. It wasnt pretty but is was > the best I could come up with at the time. > > Anyone else got any suggestions? > > G > > > -- > Posted via http://www.ruby-forum.com/. > _______________________________________________ > Rails mailing list > Rails@lists.rubyonrails.org > http://lists.rubyonrails.org/mailman/listinfo/rails >-------------- next part -------------- An HTML attachment was scrubbed... URL: http://wrath.rubyonrails.org/pipermail/rails/attachments/20060317/0b034faa/attachment.html
Thanks for the ideas, Chris. I don''t really want to run edge rails but I''m going to try using the rjs templates plugin and see if doing the update that way makes any difference. Would be nice if the fix is that easy. :) -- Posted via http://www.ruby-forum.com/.
I''ve got it working so here''s the solution, in case anyone else runs into this. I switched to an rjs template to do the update and it didn''t fix the problem but I''m still using it after I fixed the problem elsewhere. What I had to do was simplify the updated element. If there is no div or span or anything inside the link and I replace the whole link on remote update, then it works. Here''s the generated source: <div id="contact_active_13"> <a href="#" onclick="new Ajax.Request(''/contacts/toggle_contact_method/13'', {asynchronous:true, evalScripts:true}); return false;">false</a> </div> The view code that generates it: <div id="contact_active_<%= cm.id %>"> <%= link_to_remote cm.active, :url => {:action => "toggle_contact_method", :id => cm.id} %> </div> And the rjs template: page.replace_html "contact_active_#{@contact_method.id}", link_to_remote( @contact_method.active, :url => {:action => "toggle_contact_method", :id => @contact_method.id} ) I might throw that link_to_remote part into a partial and add a css class to the anchor the way I was trying to do it with an embedded span before, but anyway that''s the basic setup that is working for me. -- Posted via http://www.ruby-forum.com/.