Es sieht aus, dass viele Dinge in vielerlei Hinsicht falsch sind. Erster Blick:
- HTML Zeilen, Tag Schließen
/td>
auf erste Zelle, beide Reihen nicht korrekt ist. Wechseln Sie zu </td>
.
- JQuery-Code sollte
.unbind()
sein, nicht nur .unbind
$(".allCheckboxes")
nicht in Ihrem HTML existieren. Meinst Du $(".allchecks")
?
nicht sicher, ob dies Ihre Absicht ist: https://jsfiddle.net/Twisty/Lw7nvgsr/
HTML
<table>
<tr>
<td style="text-align: left;">Summary</td>
<td>
<input type="checkbox" class="allchecks" checked="checked" name="Summary" value="1" data-editIcon="SummaryEditIcon">
</td>
<td>
<input type="checkbox" class="allchecks" checked="checked" name="Summary" value="2" data-editIcon="SummaryEditIcon">
</td>
<td>
<input type="checkbox" class="allchecks" checked="checked" name="Summary" value="3" data-editIcon="SummaryEditIcon">
</td>
<td>
<a id="SummaryEditIcon"><img href="#"></a>
</td>
</tr>
<tr>
<td style="text-align: left;">Model</td>
<td>
<input type="checkbox" class="allchecks" checked="checked" name="Summary" value="1" data-editIcon="ModelEditIcon">
</td>
<td>
<input type="checkbox" class="allchecks" checked="checked" name="Summary" value="2" data-editIcon="ModelEditIcon">
</td>
<td>
<input type="checkbox" class="allchecks" checked="checked" name="Summary" value="3" data-editIcon="ModelEditIcon">
</td>
<td>
<a id="ModelEditIcon"><img href="#"></a>
</td>
</tr>
</table>
JQuery
$(document).ready(function() {
$(".allchecks").unbind().change(function() {
var editIconId = $(this).attr("data-editIcon");
if ($(this).prop("checked")) {
console.log("Enabling " + editIconId);
$("#" + editIconId).removeAttr("disabled");
} else {
console.log("Disabling " + editIconId);
$("#" + editIconId).prop("disabled", true);
checkAndEnableEditIcon(editIconId);
}
});
function checkAndEnableEditIcon(editIconId) {
var count = 0;
$(".allchecks").each(function() {
if ($(this).attr("data-editIcon") == editIconId) {
count++;
if ($(this).attr("checked")) {
$("#" + editIconId).removeAttr("disabled");
return;
}
}
if (count == 3) {
return;
}
});
}
});
Auch mit diesen Änderungen, vermute ich, nichts davon ist so arbeiten, wie Sie es wollen zu und das ist eher ein logisches Problem als ein Code-Problem. Sie geben in Ihrem anderen Post, ", wenn eines der Kontrollkästchen aktiviert ist, ein Bild in der entsprechenden Zeile muss angezeigt werden." Das machte nicht viel Sinn für mich, bis ich es mehrmals gelesen habe. Ich denke, was Sie meinen ist, dass, wenn eines der Kontrollkästchen in dieser Zeile aktiviert ist, nach dem Änderungsereignis das Bild für diese Zeile sichtbar wird.
Um dies zu erhalten, sollten Sie den Rat der im letzten Beitrag genommen haben: 1) Wie erhalten Sie Wert der Checkbox? 2) Wie man Bild versteckt/zeigt? Suche sie auf SO oder Google - es gibt viele Antworten. - Alexander Trakhimenok. Überprüfen Sie den Wert jedes Kontrollkästchens und zeigen Sie dann ein Bild an oder blenden Sie es aus. Dies ist eine Möglichkeit, es zu tun:
https://jsfiddle.net/Twisty/Lw7nvgsr/4/
HTML
<table>
<tr>
<td style="text-align: left;">Summary</td>
<td>
<input type="checkbox" class="allchecks" checked="checked" name="Summary" value="1" data-editIcon="SummaryEditIcon">
</td>
<td>
<input type="checkbox" class="allchecks" checked="checked" name="Summary" value="2" data-editIcon="SummaryEditIcon">
</td>
<td>
<input type="checkbox" class="allchecks" checked="checked" name="Summary" value="3" data-editIcon="SummaryEditIcon">
</td>
<td>
<a id="SummaryEditIcon" href="#"><img src="https://cdn0.iconfinder.com/data/icons/business-finance-11/100/icon-37-128.png" /></a>
</td>
</tr>
<tr>
<td style="text-align: left;">Model</td>
<td>
<input type="checkbox" class="allchecks" checked="checked" name="Summary" value="1" data-editIcon="ModelEditIcon">
</td>
<td>
<input type="checkbox" class="allchecks" checked="checked" name="Summary" value="2" data-editIcon="ModelEditIcon">
</td>
<td>
<input type="checkbox" class="allchecks" checked="checked" name="Summary" value="3" data-editIcon="ModelEditIcon">
</td>
<td>
<a id="ModelEditIcon" href="#"><img src="https://image.freepik.com/free-icon/summary_318-101407.png"></a>
</td>
</tr>
</table>
JQuery
$(document).ready(function() {
$(".allchecks").change(function(e) {
loopRow($(this).parent().parent());
});
function loopRow(r) {
console.log("Checking Row " + r[0].rowIndex);
var showImg = false;
$(r).find(".allchecks").each(function(k, v) {
if ($(v).is(":checked")) {
console.log("Found Check in row ", r);
showImg = true;
}
});
if (showImg) {
$(r).find("td:last-child img").show();
} else {
$(r).find("td:last-child img").hide();
}
}
$("table tr").each(function() {
loopRow($(this));
});
});
das Rad nicht Stören Sie remaking. Nutzen Sie die verfügbaren Werkzeuge.Wenn ein Kontrollkästchen geändert wird, durchlaufen Sie alle Kontrollkästchen in dieser Zeile, sehen Sie, ob ein Kontrollkästchen .is(":checked")
. Dies wird true
oder false
zurückgeben, also markieren Sie es, wenn Sie ein Kontrollkästchen gefunden haben.
Wenn alle 3 deaktiviert sind, bleibt das Flag falsch und das Bild wird ausgeblendet. Wenn Sie möchten, können Sie .remove()
und .append()
das Bild ein und aus. Eine weitere Methode, um den Fluss und das Rendern beizubehalten, besteht darin, das Attribut visible
über CSS umzuschalten.
Zuletzt loopiere ich jede Zeile in der Tabelle, wenn die Seite geladen wird, und prüfe in jeder Zeile nach Prüfungen.
'$ (". AllCheckboxes "). Aus ('change'). Change (function() {})' –
ja..aber im aktuellen Zustand, wenn in einer Zeile eines der Kontrollkästchen aktiviert ist, dann muss nur das Symbol angezeigt werden ... Der obige Code wird nicht einmal in der aktuellen Phase ausgeführt, und auch nachdem alle Kontrollkästchen deaktiviert wurden – Bhanu
Warum müssen Sie die Bindung lösen? Ich denke, dass Sie erreichen können, was Sie auf normale Weise erreichen möchten – RRR