Pregunta

Tengo este jsfiddle http://jsfiddle.net/danieltulp/gz5n/

Lo que quiero hacer es FITER Una lista desordenada en propiedades de datos con aproximadamente 6 controles deslizantes.Pero para mi desarrollo solo estoy usando dos

Primera pregunta: el control deslizante de calidad funciona bien, pero cuando deslice el control deslizante de precios, ve las variables MINP y maxp como objetos, ¿por qué?¿Cómo puedo arreglar eso?

Segunda pregunta: Mi código ahora está muy desordenado, tengo que escribir código específico a cada filtro (es decir, precio, calidad, etc.), ¿cómo puedo simplificar / acortar mi código?

Código de Fiddle:

html

<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"o/>
<div class="demo">
    price<br />
    <div id="price"></div>
    quality<br />
    <div id="quality"></div>
    <ul id="products">
        <li data-price="10" data-quality="20"> product - £10 q20</li>
        <li data-price="50" data-quality="40"> product - £50 q40</li>
        <li data-price="100" data-quality="80"> product - £100 q80</li>
        <li data-price="150" data-quality="30"> product - £150 q30</li>
        <li data-price="200" data-quality="40"> product - £200 q40</li>
    </ul>
</div>

javascript

function showProducts(minP, maxP, minQ, maxQ) {
    $("#products li").filter(function() {
        var price = parseInt($(this).data("price"), 10);
        var quality = parseInt($(this).data("quality"), 10);
        if(price >= minP && price <= maxP && quality >= minQ && quality <= maxQ){
             $(this).show();
        } else {
             $(this).hide();
        }
    });
}

$(function() {
    var options = {
        range: true,
        min: 0,
        max: 250,
        values: [0, 250],
        slide: function(event, ui) {
            if(event.target.id = "price"){
                var minP = ui.values[0],
                      maxP = ui.values[1],
                      minQ = $("#quality").slider("values", 0),
                      maxQ = $("#quality").slider("values", 1);
             }
            if(event.target.id = "quality"){
                var minP = $("#price").slider("values", 0),
                      maxP = $("#price").slider("values", 1),
                       minQ = ui.values[0],
                       maxQ = ui.values[1];
              }
              alert(minP +", "+ maxP +", "+ minQ +", "+ maxQ);
              showProducts(minP, maxP, minQ, maxQ);
          }
      };

     $("#price").slider(options);
     $("#quality").slider(options);
  });

Editar: El primer problema con las variables MIN MAX que son objetos también le sucede al control deslizante de calidad si muevo el estado de calidad de la calidad superior al precio.Los valores de precios son entonces correctos.Por lo tanto, parece ser un problema con las afirmaciones de IF en la función deslizante.

Otros consejos

Parece que cambiar el evento de diapositiva para cambiar me permite usar

change: function(event, ui) {
        var minP = $("#price").slider("values", 0);
        var maxP = $("#price").slider("values", 1);
        var minQ = $("#quality").slider("values", 0);
        var maxQ = $("#quality").slider("values", 1);
        showProducts(minP, maxP, minQ, maxQ);
    }

Esto no fue posible con el evento de diapositivas, ya que estas afirmaciones tomaron los valores antiguos, ya que el evento de diapositivas se activa durante el deslizamiento (probado en iPad, no estoy seguro de cómo funciona esto con el mouse real) Consulte http://jqueryui.com/demos/slider/#event-slide para Más información

trabajando jsfiddle http://jsfiddle.net/danieltulp/gz5n/42/

Ahora todavía necesito simplificar / acortar mi código


editar :

Tengo una idea para hacer al menos código más claro

Primero necesito determinar si el SlideVervalue ha aumentado o disminuido, entonces puedo filtrar solo para que los elementos de la lista se muestran o ocultos se oculten o muestren

Esto permite que solo los elementos de la lista ya filtrados, así que no necesito ocultarlos nuevamente, ya que estaba haciendo en mi código anterior

Pero mi jsfiddle se rompe en algo en mi código, pero no puedo reducirlo, ¿alguna idea? http://jsfiddle.net/danieltulp/4uf3e/4/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top