2014-09-24 86 views
0

有可能我正在這樣做,但是在這裏。我在一個updatepanel之外有一個滑塊,用於刷新該面板的內容。我將滑塊值傳遞給隱藏字段,並使用.Net TextChanged事件刷新面板。從jQueryUI滑塊刷新UpdatePanel當值不變時

所有的作品很好,直到我只是單擊句柄而不滑動它,所以值是相同的,它仍然觸發滑塊「更改」事件,但因爲隱藏字段中的值沒有改變.Net TextChanged事件doesn沒有火,所以面板的內容消失了。

如果在沒有移動句柄的情況下有一種方法可以忽略點擊,或者在代碼隱藏中保持相同值傳遞給數據函數的某種方式,那將是一件好事。

任何想法理解

戴夫

代碼(爲清楚起見略縮短)

<script> 
    $(document).ready(function() { 
     $("#slider").slider({ 
      min: 1, 
      max: sizes.length - 1, 
      value: 2, 
      animate: true,    
      create: function (event,ui){ 
       $("#slider").find(".ui-slider-handle").text("8") 
      }, 
      slide: function (event, ui) { 
       var value = $("#slider").slider("option", "value"); 
       $("#slider").find(".ui-slider-handle").text(sizes[ui.value]); 
      }, 
      change: function (event, ui) { 
       var value = $("#slider").slider("option", "value");     
       $("#slider").find(".ui-slider-handle").text(sizes[ui.value]); 
       $("#<%= hid.ClientID %>").val(sizes[ui.value]); 
       var UpdatePanel1 = '<%=ajaxGrid.ClientID%>'; 
       __doPostBack(UpdatePanel1, ''); 
      }, 
      stop: function (event, ui) { 
      } 
     }); 
    }); 
</script> 

<div id="slider" style="width:400px;"></div> 
<asp:UpdatePanel runat="server" ID="ajaxGrid" UpdateMode="Conditional"> 
    <ContentTemplate> 
     <div id="productgrid" class="productgrid" runat="server"></div> 

    </ContentTemplate> 
</asp:UpdatePanel> 
<asp:HiddenField ID="hid" runat="server" OnValueChanged ="portionCount_TextChanged" /> 

代碼後面

List<product> _products = new List<product>(); 

protected void Page_Load(object sender, EventArgs e) 
{   
    if (!IsPostBack) 
    { 
     loadJSArray(); 
     _products = product.getProductsByCatParentAndServings(61, 8); // default 
    } 

    drawGrid(); 
} 

protected void portionCount_TextChanged(object sender, EventArgs e) 
{ 
    _products = product.getProductsByCatParentAndServings(61, int.Parse(hid.Value)); 
    drawGrid(); 
} 

回答

0

事實證明,這是用於紙板程序員的情況下 - 一旦我發佈它,我想出了一個解決方案。

我設置一個臨時變量,並剛剛通過了最後一組值和周圍相比,所以jQuery的位是現在這個樣子:

var sliderWas=0; 
     $("#slider").slider({ 
      min: 1, 
      max: sizes.length - 1, 
      value: 2, 
      animate: true,    
      create: function (event,ui){ 
       $("#slider").find(".ui-slider-handle").text("8") 
      }, 
      slide: function (event, ui) { 
       var value = $("#slider").slider("option", "value"); 
       $("#slider").find(".ui-slider-handle").text(sizes[ui.value]); 
      }, 
      change: function (event, ui) {     
       var value = $("#slider").slider("option", "value");     
       $("#slider").find(".ui-slider-handle").text(sizes[ui.value]); 
       $("#<%= hid.ClientID %>").val(sizes[ui.value]); 
       if (ui.value != sliderWas) { 
        var UpdatePanel1 = '<%=ajaxGrid.ClientID%>'; 
        __doPostBack(UpdatePanel1, ''); 
       } 
       sliderWas = value; 
      }, 
      stop: function (event, ui) { 
      } 
     });