[support] Drupal behaviors misbehaving
Jeff Greenberg
listmail.ayendesigns at gmail.com
Fri Mar 15 15:17:15 UTC 2013
Jamie, thanks for this, so with your 'even better' example, given the
following, with the final line being what I'll change to your line
beginning var div =, what would I do with the rest of the wrapping to
change it to the .once() methodology?
(function ($) {
Drupal.behaviors.PlaceHolders = {
attach: function (context, settings) {
$(context).find('#menu-user-navigation li:first-child').prepend('<div
class="settings"></div>');
On Fri, Mar 15, 2013 at 11:07 AM, Jamie Holly <hovercrafter at earthlink.net>wrote:
> First off, you really should use one of the once methods, which is
> different depending on if you're in Drupal 6 or 7. 6 actually doesn't have
> that method, but rather you add a class indicating it's been processed:
>
> $("#x:not(.my-class-processed)", context).each(function(){
> $(this).addClass('my-class-processed');
> {..LOGIC..}
> })
>
> For 7:
>
> $("#x", context).once('x', function(){
> {..LOGIC..}
>
> })
>
> That prevents the settings div and handler from getting added multiple
> time during different ajax calls that might fall within the same context.
>
> For your logic, it looks like you're confusing .click() with .toggle().
> Click responds to every click and only takes a single callback. Toggle()
> takes 2 callbacks, one that is fired on odd clicks and one that is fired on
> even.
>
> var div = $('<div />').addClass('settings');
> $(this).prepend(div);
> div.toggle(
> // Odd clicks
> function(){
> $('#p').show();
> },
> // Even clicks
> function() {
> $('#p').hide();
> })
>
> Even better:
>
> var div = $('<div />').addClass('settings');
> $(this).prepend(div);
> div.click(function(){
> if ($('#p').is(':visible')) {
> $('#p').hide();
> } else {
> $('#p').show();
> }
> })
>
> Jamie Hollyhttp://www.intoxination.net http://www.hollyit.net
>
> On 3/15/2013 10:48 AM, Jeff Greenberg wrote:
>
> I have the following in Drupal.behaviors:
>
> $(context).find('#x').prepend('<div class="settings"></div>');
> $(context).find('div.settings').click(
> function () {
> $('#p').show();
> },
> function () {
> $('#p').hide();
> }
> );
> The div gets prepended, but the click does nothing. If I just enter the
> jQuery('#p').show() in the console, it works fine.
>
> --
> ---
> drupal.org/user/367108
> linkedin.com/in/jeffrgreenberg
> accidentalcoder.com / ayendesigns.com
> @accidentalcoder
>
>
>
>
> --
> [ Drupal support list | http://lists.drupal.org/ ]
>
--
---
drupal.org/user/367108
linkedin.com/in/jeffrgreenberg
accidentalcoder.com / ayendesigns.com
@accidentalcoder
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.drupal.org/pipermail/support/attachments/20130315/17cbd757/attachment.html
More information about the support
mailing list