cesy: "Cesy" - An old-fashioned quill and ink (Default)
Cesy ([personal profile] cesy) wrote in [site community profile] dw_dev_training2009-09-21 08:05 am
Entry tags:

Javascript help

I am trying to implement a solution to Bug 581, and I need to do some Javascript that will make a hidden section appear when clicked on. So far I have this:

$out .= "Click here to see all your tags";
$out .= "


(and then the actual content in the span). What should my ShowTags() function actually do in order to change the style to display:inline? I found one example on the web, but it used fancy browser-sniffing, and it appears we have our own browser-sniffing module and I don't know how to adapt it for that.
mark: A photo of Mark kneeling on top of the Taal Volcano in the Philippines. It was a long hike. (Default)

[staff profile] mark 2009-09-21 07:39 am (UTC)(link)
If that page used jQuery, it'd be simple!

$('#divid').toggle();

But since it doesn't, I'm not sure what the best way to do it is...
wyntarvox: (Default)

[personal profile] wyntarvox 2009-09-21 09:22 am (UTC)(link)
What about:

document.getElementById('divid').style.display = 'inline';

I'm pretty certain this is supported by all of the major current browsers (going back a number of versions, even).

Having said that, like Cesy suggested in her reply, we could just include jQuery on this page, unless there's a reason it isn't currently?
pauamma: Cartooney crab wearing hot pink and acid green facemask holding drink with straw (Default)

[personal profile] pauamma 2009-09-21 12:50 pm (UTC)(link)
See the Javascript function showAnswer in htdocs/support/faqbrowse.bml, which uses that method.
janinedog: (Default)

[personal profile] janinedog 2009-09-21 03:06 pm (UTC)(link)
Yup, and actually if using LJ's JS, you can use $('divid') instead of document.getElementById('divid').

But the general idea is to have the div have a display: hidden; property, and have the onclick handler for the div do $('divid').style.display = 'block'; (or 'inline', depending on how you want it to look). If you want it to be able to toggle off again, just have your JS check to see if the div is hidden or shown first (by looking at the $('divid').style.display property), and then do the opposite.
wyntarvox: (Default)

[personal profile] wyntarvox 2009-09-22 10:23 pm (UTC)(link)
getElementById() uses the id attribute, not the class attribute, so your span should look something like:

<span class="tagslist" id="tagslistid" style=display:none;>[Actual tags]</span>

And you would then use:

<script type=text/javascript>document.getElementById('tagslistid').style.display = 'inline';</script>
Edited 2009-09-22 22:25 (UTC)
mark: A photo of Mark kneeling on top of the Taal Volcano in the Philippines. It was a long hike. (Default)

[staff profile] mark 2009-09-28 05:41 pm (UTC)(link)
jQuery conflicts with the default 6A/LJ JS that we use, so on any page that has existing JS (which the update page has a ton of), we have to port that to use the jQuery calls.

It's probably not a HUGE task, but it hasn't been done yet. I imagine that the FCKEditor is compatible with jQuery, and that's the bulk of it.
wyntarvox: (Default)

[personal profile] wyntarvox 2009-09-28 09:04 pm (UTC)(link)
I haven't looked in to exactly how they conflict, so I might be completely off-base, but to avoid the conflict could we use:

var $jQ = jQuery.noConflict();

For anyone following along, this remaps the default jQuery $ to $jQ (and releases the $ back to whatever other library wants it), so $(document) becomes $jQ(document).
mark: A photo of Mark kneeling on top of the Taal Volcano in the Philippines. It was a long hike. (Default)

[staff profile] mark 2009-09-28 09:07 pm (UTC)(link)
I don't believe that works since the 6A/LJ JS code does a lot of messing with class prototypes. So, if jQuery is expecting a class to act a certain way, it likely won't work.

You can try it though! I dismissed it pretty easily, but admit I haven't done any thorough testing.