2012-04-11 60 views
0

我有一個在jQuery中給出的HTML表中的可摺疊行效果。這工作正常,沒有ajax民意調查,但是當一個ajax更新發生崩潰效果不會工作,有什麼我在這裏做錯了。重新調用jQuery的可摺疊效果jQuery AJAX響應後

注: 有時,當用戶單擊+簽名更改爲 - 號,但該行不顯示,而大部分時間,即使這個工程的雙擊

.xhtml頁面

<tbody> 
<ui:repeat var="trY" value="#{dataBean.bdata}"> 
<tr class="main-#{trY.symbol}"> 
<td><span id="more-#{trY.symbol}"> 
    <ui:fragment rendered="#{trY.has == '+'}"> 
    <a id="a-#{trY.symbol}" class="plus" href="#" style="color: black;" name="+">+</a> 
    </ui:fragment> 
    </span> 
</td> 
    </tr> 
    <ui:repeat var="trB" value="#{trY.comp}" varStatus="st"> 
<tr class="orB-#{trY.symbol}"> 
<td class="tbl_column_buy1"> 
     <div class="qty_margins"> 
     <span id="orBbidQty-#{trY.symbol}#{st.index}">#{trB.bidQuantity}</span> 
     </div> 
</td> 
<td class="tbl_column_buy2"> 
    <div class="qty_margins"> 
     <span id="orBbidPrice-#{trY.symbol}#{st.index}">#{trB.bidPrice}</span> 
    </div> 
</td> 
<td>&nbsp;</td> 
</tr> 
</ui:repeat> 
</tbody> 

JQuery的腳本

$(document).ready(function() { 
    $('.orB').hide(); 
    $(".plus").click(function(){ 
     var id = $(this).attr('id'); 
       id = id.split('-'); 

     if($("#a-"+id[1]).html() == '+'){ 
      $(".orB-"+id[1]).show(); 
      $("#a-"+id[1]).html("-"); 
     }else if($("#a-"+id[1]).html() == '-'){ 
      $(".orB-"+id[1]).hide(); 
      $("#a-"+id[1]).html('+'); 
     } 
     return false; 
    });  
}); 

    function orBK(){ 
      $(".plus").click(function(){ 
     var id = $(this).attr('id'); 
       id = id.split('-'); 

     if($("#a-"+id[1]).html() == '+'){ 
      $(".orB-"+id[1]).show(); 
      $("#a-"+id[1]).html("-"); 
     }else if($("#a-"+id[1]).html() == '-'){ 
      $(".orB-"+id[1]).hide(); 
      $("#a-"+id[1]).html('+'); 
     } 
     return false; 
    }); 
    } 
    /* ajax timer to update */   
    $(document).ready(function() { 
    var i = setInterval(function() 
       { 

        $.ajax({ 
          type : "POST", 
          url : 'http://localhost:8080/myproject/faces/trade/dataPage.xhtml', 
          dataType : "json", 

          success: function(data) { 


          $.each(data, function(i, item) { 


       if(data[i].Has == "+"){ 
        $("span[id*='more-"+data[i].Symbol+"']").html("<a id='a-"+data[i].Symbol+"' class='plus' href='#' style='color: black;'>+</a>"); 
       } 
       if(data[i].comp != null){ 
        for(var j=0; j<data[i].comp.length; j++){ 
         $("span[id*='orBbidQty-"+data[i].Symbol+""+j+"']").text(item.comp[j].BidQuantity); 
         $("span[id*='orBbidPrice-"+data[i].Symbol+""+j+"']").text(item.comp[j].BidPrice); 
        } 
       } 
         }); 
          $(".plus").unbind('click', orBK); 
          $(".plus").bind('click', orBK); 
          }, 
          error : function() { 
          alert("Sorry, The requested property could not be found."); 
          } 
         }); 
       }, 4000); 

}); 
+0

代碼太多。移動 – 2012-04-11 03:39:22

回答

0

首先,JavaScript是區分大小寫的。您的功能名爲orBK,但在您的AJAX更新中,您重新綁定爲orBk。其次,orBK分配一個點擊處理程序,但它自己分配另一個點擊處理程序。最後,查看jQuery委託事件綁定(舊版本中的.live,更新版本中的.on)。你不需要重新綁定你的處理程序。

+0

我已經糾正了這個錯誤謝謝,但它仍然無法正常工作。當使用.live時,它僅在刷新後才起作用。 .on從未工作過。 – Swarne27 2012-04-11 04:20:17

+0

orBK仍會在上面的代碼中分配一個點擊處理程序。你也應該解決這個問題。另外,.on是綁定所有處理程序,直接或委託的新方法,並且我沒有遇到任何問題。 – 2012-04-11 12:08:51