Привязать панель фильтров JQuery к отсортированному списку - PullRequest
1 голос
/ 04 июля 2011

Я не уверен, как правильно сформулировать этот вопрос, так со мной.

У меня есть массив JSon, загруженный в мобильный список JQuery.У меня есть 4 радио кнопки для сортировки списка.Все работает.

Плюс, у меня есть панель фильтров для поиска отсортированных результатов.Допустим, я отсортировал свой список по возрастанию цены, я могу искать в списке с помощью панели фильтров.Но если я нажимаю цену по убыванию, список автоматически обновляется до значения по умолчанию.

Поэтому я пытаюсь отсортировать по возрастанию имени, отфильтровать результаты с помощью панели поиска и, если я нажму другую кнопку сортировки, список не обновляется.

Надеюсь, вы меня понимаете, я объяснил это настолько ясно, насколько смог.Вот мой код:

var productList = {"products": [
    {"brand": "brand1", "description": "Product 1", "price": "03.25 "},
    {"brand": "brand2", "description": "Product 4", "price": "01.10 "},
    {"brand": "brand3", "description": "Product 3", "price": "04.21 "},
    {"brand": "brand4", "description": "Product 2", "price": "15.24 "},
    {"brand": "brand5", "description": "Product 5", "price": "01.52 "},
    {"brand": "brand6", "description": "Product 6", "price": "12.01 "},
    {"brand": "brand7", "description": "Product 7", "price": "05.24 "}</p>

<p>]
};</p>

<p>$(document).ready(function() {</p>

<pre><code>console.debug('ready');

$('#sort > input[type = "radio"]').next('label').click( function(event, el) {


    console.debug($(event.currentTarget).prev('input').attr('id'));

    sortID = $(event.currentTarget).prev('input').attr('id');

    refresh(sortID);
});

});

функция обновления (sortID) {

var list = $ ("# productList"). Listview ();$ (Список) .empty ();var prods = productList.products.sort (function (a, b) {switch (sortID) {case 'sort-a-z': вернуть a.description> b.description; case 'sort-z-a': вернуть a.description parseInt (b.price); case 'sort-price-down': return parseInt (a.price) b.description;}});$ .each (prods, function () {list.append ("" + this.description + ":" + this.price + "");});$ (Список) .listview ( "Обновить"); }

1 Ответ

1 голос
/ 05 июля 2011

Я не уверен, в чем именно проблема, но я знаю, что вы не должны использовать parseInt для сравнения таких цен.

  • parseInt останавливается, когда видит нецифровую цифру.
  • Если первый символ, переданный в parseInt, равен 0, то строка оценивается в базе 8 вместо базы 10. В базе 8, 8 и 9 не являются цифрами, поэтому parseInt ("08") и parseInt ("09") произвести 0 в качестве результата.

parseInt может принимать параметр radix, так что parseInt ("08", 10) выдает 8.

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

кроме того, код, которым вы поделились, выглядит хорошо для меня.

...