Tuesday, April 17, 2012

Using jQuery .live with toggle event


My code is working, but requiring me to click twice to active my chaining (once for the click event, and once for the toggle event.) What can I do to make it so I only have to click once so that the toggle will automatically occur?




//Show or Hide Comments
$('#showHideComments').live('click', function() {
$('#showHideComments').toggle(function() {
$(".commentsSwitch").animate({"marginLeft": "+=53px"}, 500);
$("#comments").fadeIn(300);
$("#addComment").fadeIn(300);
},function(){
$(".commentsSwitch").animate({"marginLeft": "-=53px"}, 500);
$("#comments").fadeOut(300);
$("#addComment").fadeOut(300);
});
});



Thanks!


Source: Tips4all

2 comments:

  1. You cannot use live and toggle together. What you can do, is simply make your own "toggle" of sorts:

    $('#showHideComments').live('click', function() {
    if($("#addComment").is(':visible')){
    $(".commentsSwitch").animate({"marginLeft": "-=53px"}, 500);
    $("#comments, #addComment").fadeOut(300);
    } else {
    $(".commentsSwitch").animate({"marginLeft": "+=53px"}, 500);
    $("#comments, #addComment").fadeIn(300);
    };
    });


    live is binding to click, however, when toggle is called, it is also bound (normally) on click. You should decide if 'live' is really what you need. For instance, if #showHideComments object is replaced via AJAX during the use of the page, then you need live and my solution. However, if it isn't swapped out and remains the same, just use the inside of your original live function (just the toggle code) and you will be golden.

    ReplyDelete
  2. //Show or Hide Comments
    $('#showHideComments').live('click', function() {
    $('#showHideComments').toggle(function() {
    $(".commentsSwitch").animate({"marginLeft": "+=53px"}, 500);
    $("#comments").fadeIn(300);
    $("#addComment").fadeIn(300);
    },function(){
    $(".commentsSwitch").animate({"marginLeft": "-=53px"}, 500);
    $("#comments").fadeOut(300);
    $("#addComment").fadeOut(300);
    }).trigger('click');
    });


    This will also work :)

    ReplyDelete