2014-09-20 37 views
0

JSFIDDLEjQuery的選擇所有的複選框,如果複選框已被選取不.change()

當您檢查的箱子一個,相應的表格單元格有自己的文字取出,放置在輸入文本值。問題出在select all函數上,因爲它沒有正確地觸發.change()事件。如果選中一個複選框,然後選中「全選」複選框,則會清除單元格值。我怎樣才能確定它是否已經被檢查,不執行.change()函數?

$("#selectall").click(function() { 
var checkall = $("#selectall").prop('checked'); 

if (checkall) { 

    $('#amazon-update :checkbox').each(function() { 
     var $this = $(this); 

     if ($this.is(':checked')) { 
      //nothing 
     } else { 
      $(".checkbox").prop("checked", true).change(); 
     } 
    }); 

} else { 

    $('#amazon-update :checkbox').each(function() { 
     var $this = $(this); 

     if ($this.is(':checked')) { 
      $(".checkbox").prop("checked", false).change(); 
     } else { 
      //nothing       
     } 
    }); 
} 
}); 

$(".checkbox").click(function() { 

if ($(".checkbox").length == $(".checkbox:checked").length) { 
    $("#selectall").prop("checked", true); 

} else { 
    $("#selectall").prop("checked", false); 
} 
}); 

$('#amazon-update :checkbox').change(function() { 

var $this = $(this); 

// $this will contain a reference to the checkbox 

if ($this.is(':checked')) { 

    // the checkbox was checked 
    var sku_td = $this.parent().siblings('.sku').text(); 
    var price_td = $this.parent().siblings('.price').text(); 
    var quantity_td = $this.parent().siblings('.quantity').text(); 

    $this.parent().siblings('.price').empty(); 
    $this.parent().siblings('.quantity').empty(); 

    var sku = $('<input type="hidden" name="sku[]" value="' + sku_td + '">'); 
    var price = $('<input type="text" class="form-control" name="price[]" value="' + price_td + '">'); 
    var quantity = $('<input type="text" class="form-control" name="quantity[]" value="' + quantity_td + '">'); 

    $this.parent().siblings('.sku').append(sku); 
    $this.parent().siblings('.price').append(price); 
    $this.parent().siblings('.quantity').append(quantity); 
} else { 

    // the checkbox was unchecked   
    var sku_td = $this.parent().siblings('.sku').children().val(); 
    var price_td = $this.parent().siblings('.price').children().val(); 
    var quantity_td = $this.parent().siblings('.quantity').children().val(); 

    $this.parent().siblings('.sku').empty(); 
    $this.parent().siblings('.price').empty(); 
    $this.parent().siblings('.quantity').empty(); 

    $this.parent().siblings('.sku').append(sku_td); 
    $this.parent().siblings('.price').append(price_td); 
    $this.parent().siblings('.quantity').append(quantity_td); 

} 

}); 

回答

0

我更新了小提琴上的代碼。

的主要問題是這一行:

$(".checkbox").prop("checked", true).change(); 

代替此行應該是:

$ this.prop( 「選中」,真).change()。

請參閱更新提琴手。

http://jsfiddle.net/5msp5jbn/6/

+1

謝謝!我是如此接近...... – 2014-09-20 04:01:07

+0

沒錯,它發生的解決方案就在那裏,我們就是看不到。 – codebased 2014-09-20 04:10:07