2014-04-03 59 views
1

我有下面的代碼在取消選中複選框觸發事件

<li> 
    <input type="checkbox" value="1" class="filter" name="Bedroom"> 
    <a id="1" href="javascript:void(0)" class="filter1"> Bedroom </a>   
</li> 

<li> 
    <input type="checkbox" value="7" class="filter" name="Living Room"> 
    <a id="7" href="javascript:void(0)" class="filter1"> Living Room </a>   
</li> 

<li> 
    <input type="checkbox" value="6" class="filter" name="Corridor"> 
    <a id="6" href="javascript:void(0)" class="filter1"> Corridor </a>   
</li> 
</ul> 

Java腳本

<script> 

    var id=''; 
    jQuery('.filter').click(function(){   

    jQuery('.filter').each(function(){  
     if(jQuery(this).attr('checked')) 
     { 
      id+=jQuery(this).val()+','; 
     }    
    }); 
     alert(id); 

     jQuery.get('<?php echo $this->getUrl('some url') ?>',{cat:id},function(data){ 
     jQuery('#id').html(data); 
     }); 
    });   
    </script> 

假設我查一個複選框,我得到那個複選框的ID。

id+=jQuery(this).val()+','; 

如何從ID變量取消選中複選框刪除元素的ID?

我試圖讓Ajax調用,當我上的複選框,然後單擊我應該得到 包含複選框實例的ID的網址... /?貓= 7%2C7%2C6%2C

和取消選中的複選框的複選框的IDS不應存在

+0

點擊事件被調用以檢查和取消選中。你能解釋一下你想達到的目標嗎? – malkassem

+0

@malkassem請參閱已更新的問題 – Muk

+0

我添加了一個基於您更新的問題的答案... – malkassem

回答

3

你會在列表中創建重複的ID,一個簡單的辦法是每次都重新創建ID字符串像

var id; 
var $checks = jQuery('.filter').change(function() { 
    id= $checks.filter(':checked').map(function() { 
     return this.value; 
    }).get().join(', '); 
    console.log(id); 
}); 

演示:Fiddle

+0

將原始選擇存儲在'$ checks'中的好方法。 ) – raina77ow

0

不要使用字符串,但使用數組:

var ids = new Array(); 

對於檢查不使用click事件,但變化事件:

$(".filter").change(function() { 


    if ($(this).prop("checked") == true) { 
     // Add the id to the list 
     ids.push($(this).attr("id")); // Note the attribute, not the val()! 
    } else { 

     var index = -1; 
     $.each(ids, function(idx, value) { 
      if (value == $(this).attr("id")) index = idx; 

     }); 

     ids.splice(idx, 1); //Remove the id 
    } 
} 
0

考慮的另一種方法。

var ids = []; 
jQuery('.filter').change(function(){   
    ids = []; // Reinitialize array 
    jQuery('.filter:checked').each(function(){ 
     ids.push(this.value); 
    }); 
    alert(ids.join(',')); // Stringifies your array, using a comma as a separator. 
}); 

// You have access to ID's in outer scope as well! 

有些人可能會認爲這是一個「性能損失」重新初始化每次 但看到你只有很少的複選框,我看不出有什麼問題。

0

你原來的問題的案文:

如何去除取消選中複選框元素的ID?

答:

jQuery('.mySelector').each(function() { 
    jQuery(this).removeAttr('id'); 
} 

你可能在任何網站上加載了jQuery,即jquery.com測試這個片段 - 在瀏覽器中打開,打F12並粘貼到控制檯(並看着它摧毀整個CSS;)):

$('div').each(function() { $(this).removeAttr('id'); } 

更新:
從閱讀你的更新問題,我相信你的要求幾乎涵蓋了上述答案。

我的兩分錢id(現在仍然是)amiguous在你的問題而言,更好的名稱爲變量會idscsvIdStringconcatenatedCheckboxIds,或任何描述它的上下文變量最好(以下Clean Code Philosophy

+0

是的,最初我的問題是錯的 – Muk

1

如果我正確理解你的問題,下面就是你正在尋找的JavaScript:

var id=''; 
$('.filter').click(function(){   
    id=''; 
    $('.filter').each(function(){  
     if(this.checked) 
     { 
      id+=$(this).val()+','; 
     }    
    }); 
    alert(id); 
}); 

,我認爲關鍵是要重新初始化id變量爲空,所以你不會爲它增加值。

jsFiddle工作示例

+0

謝謝,我想要的一樣。 – Muk