لا يتم إطلاق حدث Checkbox .change()، عند "إطلاقه" بواسطة مربع اختيار آخر

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

سؤال

أنا أستخدم مربع اختيار للتحقق من جميع مربعات الاختيار الأخرى في الجدول.
بعد تحديد مربع الاختيار داخل الجدول (عند التغيير)، أقوم بتلخيص كل قيمة مربع نص في نفس tr.

إنه يعمل بشكل جيد على Firefox وChrome.

في IE11 والإصدارات الأقدم (من المهم بالنسبة لي أن يعمل في كل متصفح) التغيير الأول في مربع الاختيار "الكل" ما عليك سوى تحديد المربعات الأخرى، ولكنه لا يلخص قيم مربع النص.
في النقرة الثانية، يقوم بالتلخيص ولكن قم بإلغاء تحديد مربعات الاختيار.
لذلك فهو يعمل بطريقة خاطئة لأنه يتم تجاهل "التغيير" الأول أو شيء من هذا القبيل.

آسف لغتي الإنجليزية السيئة والوصف السيئ.

<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 هو معرف خانة الاختيار، والتحقق من جميع الآخرين.:)

// 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"

(قم أيضا بتنظيف الكود الخاص بك قليلا)

giveacodicetagpre.

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