2016-02-27 69 views
0

我得到了一個函數getBrandUrl(),它激發了getProducts()。getJSON如果複選框被選中然後取消選中

如果複選框被選中並且該功能被觸發(第二次,在選中的複選框上),該複選框需要被取消選中。因此,我可以構建GET請求,而不必使用該複選框的值來按品牌過濾出產品。

<input type="checkbox" name="brand[]" value="35890" onclick="javascript:getBrandUrl('35890');"> 
<a href="javascript:getBrandUrl('35890');" title="blabla" alt="blabla">blabla</a> 

第一次點擊[href](blabla)?那麼需要檢查複選框,並可以格式化GET請求。因此,如果單擊另一個複選框或[href],它將追加到URL中,並且當它第二次單擊時,需要將其刪除。

function getBrandUrl(value) 
     { 
      getProducts("<?=$filterUrl?>", value, 'brand[]'); 
     } 

function getProducts(url, value, type) 
     { 

      if($('input[type="checkbox"][value="' + value + '"]').is(':checked')) { 
       $(this).attr('checked', 'false'); 
      } else { 
       $(this).attr('checked', 'true'); 
      } 

      var checked = ''; 
      $('input[name="' + type + '"]:checked').each(function() { 
       checked += '&' + type + '=' + this.value; 
      }); 

      $.getJSON(url + checked + "&json=true", function(data) { 
       $('#productList').html(''); 

       $.each(data, function(key, val) { 
        var product = formatProductHTML(val.ID, val.PRICE, val.TITLE, val.LINK); 

        $(product).appendTo('#productList'); 
       }); 
      }); 
     } 

問題是,當我第一次點擊它時,它將立即取消選中,因此它不會被格式化的GET請求。

任何想法的如何解決這個問題或沒有人知道我在這裏做錯了什麼?

+0

爲什麼不在你的JSON過程之後取消選中它?如果你正在重新加載基於哪個框被檢查的頁面,只需銷燬DOM,即:$('#productList')。empty();並根據選中的框重新添加項目。 –

+0

我只有一個函數「getBrandUrl」,每次單擊複選框或旁邊的鏈接[href]時它都會被觸發。所以問題是如果第一次觸發,複選框會被取消選中,即使我把代碼放在我的getJSON之後。 – Jordy

+0

因此,不要使用字符串,而要使用對象或數組和函數來創建URL。那樣的話,除了拼接你的字符串之外,你可以更好地控制它的移除。 –

回答

0

忘掉所有的複選框JavaScript。

當您單擊鏈接到checkox它將會被自動檢查鏈接到它的複選框的標籤上,至極觸發的JavaScript funtion ..

<input type="checkbox" id="35890" name="brand[]" value="35890" onclick="javascript:getBrandUrl('35890');"> 
<label for="35890">blabla</label> 

而且你不必做任何檢查或創建一個檢查複選框的鏈接..