2014-09-24 3 views
0

Возможно, я делаю это кругом, но здесь идет. У меня есть ползунок за пределами панели обновления, которую я использую для обновления содержимого этой панели. Я передаю значение ползунка в скрытое поле и используя событие .Net TextChanged, чтобы обновить панель.Обновление обновленной панели от jQueryUI Slider, когда значение не изменяется

Все работает отлично, пока я просто не нажимаю на рукоятку, не сдвигая ее, поэтому значение остается таким же, что и все еще вызывает событие «изменение» слайдера, но поскольку значение в скрытом поле не изменилось, событие .Net TextChanged doesn 'огонь, поэтому содержимое панели исчезает.

Было бы хорошо, если есть способ игнорировать щелчок, если рукоятка не перемещается, или каким-либо способом сохранить одно и то же значение для передачи функции данных в коде.

Любые идеи оценили

Dave

код (слегка укороченный для ясности)

<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) { 
      } 
     }); 
Смежные вопросы