2011-08-17 52 views
0

我不是JS忍者,因此我在這裏要求一些指導。我有以下情形jQuery - 如何從兩個不同的事件加載共同的div中的內容?

  1. 頁面加載和commondiv隱藏
  2. 如果用戶點擊按鈕showeditform,我加載commondiv editform並顯示commondiv
  3. 如果用戶點擊按鈕showeditform和editform是可見的,刪除它,隱藏commondiv
  4. 如果用戶點擊按鈕showpasswordform如果editform是可見的,我刪除editform並顯示passwordform
  5. 如果用戶點擊按鈕showpasswordform如果passwordform可見,刪除和隱藏的共同DIV
  6. 如果用戶點擊按鈕showeditform如果passwordform是可見的,我刪除passwordform並顯示editform

截至目前,我已經設置了標誌,如果別人的,但它不是很好的辦法做到這一點。我怎樣才能達到這個使用最少的jQuery代碼?

更新:以下是我嘗試

$('a.editpo, a.resetpass').click(function(event){ 
    event.preventDefault(); 
    var urlToCall = $(this).attr('href'); 
    var hyperlinkid = '#'+$(this).attr('id'); 
    var targetId = $(this).attr('id').match(/\d+/); 
    var targetTrDiv = '#poformloadertr_'+targetId; 
    var targetTdDiv = '#poformloadertd_'+targetId; 
    var toToggle = $('#resetuserpassform_'+targetId).is(':visible') || $('#account-home-container-'+targetId).is(':visible') ; 
    console.log(toToggle); 
    if(toToggle == true || $(targetTdDiv).html()==''){ 
     $.ajax({ 
      url:urlToCall, 
      success: function(html){ 
       $(targetTdDiv).html(html); 
       $(targetTrDiv).show(); 
      } 
     }); 
    }else{ 
     $(targetTrDiv).hide(); 
     $(targetTdDiv).html(''); 
    } 

}); 

editporesetpass在表列中的超鏈接應用類,即修改個人信息和復位傳,點擊這些負載了形式在tr>td 。正如我所說的,我不擅長JS和jQuery,因此如果您覺得代碼可以在某個步驟進行優化,請隨時這樣做。謝謝!

回答

0

我這樣做了一週前,但代碼是在家裏,我現在不在。但基本上,您將表單名稱放入數組中,並隱藏未選中的表單,並且如果再次單擊了選定的表單,則使用.toggle();函數將其隱藏。

0

你可以試試這個。這假設你將表單HTML存儲在JS中。如果你將它存儲在一個隱藏的容器中,我可以告訴你如何將它移動到新父項中,或者只是將html複製到它中。希望這有助於!

$("#commondiv").hide(); 

$("#showeditform").click(function(){ 
    if($("#commondiv").is(":visible")) { 
    $("#commondiv").html("").hide(); 
    } else { 
    $("#commondiv").html(editformHTML).show(); 
    } 
}); 
$("#showpasswordform").click(function(){ 
    if($("#commondiv").is(":visible")) { 
    $("#commondiv").html("").hide(); 
    } else { 
    $("#commondiv").html(passwordformHTML).show(); 
    } 
}); 
+0

使用jQuery,您還可以在一個環節出的方法。因此,.fadeOut(300).html(newHTML).fadeIn(300)會在300毫秒內淡出內容,將新的HTML加載到容器中,並在300毫秒內淡入內容。 – rlemon

+0

這裏是我的拿走http://stackoverflow.com/questions/7110215/jquery-help-in-optimising-refactoring-code – Kumar

0

你會做這樣的事情:

$('#showeditform').click(function() 
    { 
     if($('#commondiv').is(':visible')) 
      $('#commondiv').hide(); 
     else 
      $('#commondiv').html('The text you want to set').show(); 

     if($('#passwordform').is(':visible')) 
     { 
      $('#passwordform').remove(); 
      $('#editform').show(); 
     } 
    }); 

    $('#showpasswordform').click(function() 
    { 
     if($('#editform').is(':visible')) 
     { 
     $('#editform').hide(); 
     $('#passwordform').show(); 
     } 

     if($('#passwordform').is(':visible')) 
     { 
     $('#passwordform').remove(); 
     $('#commondiv').hide(); 
     } 
    }); 

老實說,這聽起來像你的頁面做太多在一個頁面上。上面顯示的規則給了我一個頭痛的問題。

+0

'remove()'將從dom中移除元素。你下次如何展示它? – ShankarSangoli

+0

它沒有做任何特別的事情,gmail界面是你可以在單頁上做得太多,但是謝謝或者提示 – Kumar

+0

OP說刪除,在某些情況下不能隱藏。如果他的意思是隱藏,那麼他的問題就是含糊不清。 – Tejs

1

試試這個

$(function(){ 

     var $commonDiv = $("#commondiv"); 

     //Add the edit and password forms into common div and hide them initially 
     $("#editform").hide().appendTo($commonDiv); 
     $("#passwordform").hide().appendTo($commonDiv); 

//Editing answer based on your comments. 

     $(".showeditform").live('click', function(){ 

      if($("#editform").hasClass("loading")){//If form is already loading just return 
       returnl 
      } 

      if(!$("#editform").is(":visible")){ 
       $("#editform").addClass("loading").load("EditFormUrl", function(){ 
        $(this).removeClass("loading").show(); 
       }); 
      } 
      else{ 
       $("#editform").hide(); 
      } 

      //Always hide the passwordform 
      $("#passwordform").hide(); 
     }); 

     $(".showpasswordform").live('click', function(){ 

      if(!$("#passwordform").is(":visible")){ 
       $("#passwordform").addClass("loading").load("PasswordFormUrl", function(){ 
        $(this).removeClass("loading").show(); 
       }); 
      } 
      else{ 
       $("#passwordform").hide(); 
      } 

      //Always hide the editform 
      $("#editform").hide(); 

     }); 
    }); 
+0

Shakar麻煩的是我在Ajax調用中加載我的表單,但我仍然喜歡你所說的 – Kumar

+0

在這種情況下,您可以在將表單添加到dom(頁面)後,在AJAX成功回調中執行我的代碼。 – ShankarSangoli

+0

如果2個按鈕也來自ajax響應,那麼您需要使用jQuery'live'來附加點擊處理程序。 – ShankarSangoli

相關問題