CheckBox .change()イベントは、別のチェックボックスで「発射」の場合は発生しません。

StackOverflow https://stackoverflow.com//questions/25035006

質問

テーブル内の他のすべてのチェックボックスをチェックするためにチェックボックスを使用しています。
テーブル内でチェックボックスがチェックされた後(変更時)私は同じTRですべてのテキストボックス値を合計します。

FirefoxとChromeでうまく機能します。

IE11以降(すべてのブラウザで機能することは私にとって重要です) "all"チェックボックスの最初の変更は他のものを見るだけでなく、テキストボックスの値をまとめていません。
2番目のクリックで彼は昇降しますが、チェックボックスをアンタッチします。
だから、最初の「変更」が無視された、またはsthが間違っているか、またはsthです。

私の悪い英語と悪い説明を申し訳ありません。

<thead>
    <tr>
        <th>Auswahl <input type="checkbox" id="allcheck" /></th>
        <th>Kunden-Nr.</th>
        <th>Personal-Nr.</th>
        <th>Vorname</th>
        <th>Name</th>
        <th>Gutscheintyp</th>
        <th>Betrag €</th>
    </tr>
</thead>
<tbody>
    <tr>
        <td align="center"><input type="checkbox" name="check" /></td>
        <td align="left">1</td>
        <td align="left">2</td>
        <td align="left">3</td>
        <td align="left">4</td>
        <td align="left" class="typ">5</td>
        <td align="center" class="texttd">
        <input type="text" class="txt" maxlength="5" onclick="this.select()" value="20.00" /></td>
    </tr>
</tbody>
    <tfoot>
        <tr>
            <th colspan="5"></th>
            <th colspan="1"">Summe</th>
            <th colspan="1" id="sum">0,00</th>
        </tr>
    </tfoot>
.


AllCheckはチェックボックスのIDで、他のすべてをチェックします。:)

// TICK ALL CHECKBOXES
$('#allcheck').click (function () {
    var checkedStatus = this.checked;
    $('table tbody').find('input[type="checkbox"]').each(function () {
        $(this).prop('checked', checkedStatus);
    });
});



// SUM UP TEXTBOXES IF CHECKBOX CHECKED
$('input[type="checkbox"]').change(function() {
    var sum = 0.00;
    $("table tr td input:checked").each(function(){
        test = $(this).closest('tr').find('input[type="text"]').val();
        test = test.replace( ",",".");
    if (isNaN(test)) {
        sum = 0.00;
    }
        sum += parseFloat(test, 10);
    $("#sum").html(sum.toString().replace(".",","));
});
    sum = parseFloat(sum, 10);
    sum = sum.toFixed(2);
    $("#sum").html(sum.toString().replace(".",","));
});
.

私はあなたが私を少し助けるのに十分な情報であることを願っています。:)

役に立ちましたか?

解決

「チェック」プロパティを変更すると、必ずしも「変更」イベントが発生しないようです。

では、合計計算を別々の機能に移動し、「#AllCheck」を明示的に呼び出す必要があります。

(コードを少しきれいにしました)

// TICK ALL CHECKBOXES
$('#allcheck').click (function () {
    var checkedStatus = this.checked;
    $('table tbody').find('input[type="checkbox"]').each(function () {
        $(this).prop('checked', checkedStatus);        
    });
    updateSum();
});

// SUM UP TEXTBOXES IF CHECKBOX CHECKED
$('tbody input[type="checkbox"]').change(updateSum);

function updateSum() {
    var sum = 0.00;
    $("tbody input:checked").each(function(){
        var test = $(this).closest('tr').find('input[type="text"]').val();
        var testNum = parseFloat(test.replace( ",", "."));
        if (!isNaN(testNum)) {
            sum += testNum;
        }        
    });    
    $("#sum").text(sum.toFixed(2).replace(".",","));
}
.

jsfiddle

他のヒント

clickイベントの代わりに、すべてのチェックチェコボックスのchangeイベントを使用します。新しい値に変更した後に変更が発生し、this.checkedが正しい値を与えます。

$('#allcheck').change(function() {
    var checkedStatus = this.checked;
    $('table tbody').find('input[type="checkbox"]').each(function () {
        $(this).prop('checked', checkedStatus);
    });
});
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top