Мне нужна базовая помощь по работе с jQuery, поскольку он все еще нов для меня, и я пока не могу осмыслить его.
У меня есть динамически созданный флажок и поле ввода, которыми я хотел бы управлять через jQuery.
Они есть:
<input name = "e19[i<?php echo $taeller-1;?>]" id = "e19[i<?php echo $taeller-1;?>]" type = "checkbox" class = "check_kredit" <?php echo $checked = $foo['e19'] == '1' ? "checked=\"checked\"" : "";?> value = "1" onclick = "postmtjek(this, '<?php echo $pl;?>', '<?php echo $res['ordre'];?>', '<?php echo $res['rev'];?>', '<?php echo $foo['e28']; ?>', '<?php echo $taeller-1;?>');document.getElementsByName('e20[]')[<?php echo $taeller-1;?>].value = this.checked ? '<?php echo date('d-m-Y');?>' : '';setOBdato(document.getElementsByName('e20[]')[<?php echo $taeller-1;?>]);" data-pris = "<?php echo $foo['eStaalpris'];?>" data-datofelt = "e20[]"/>
<input type = "text" readonly class = "listform" style = "width:60px;" id = "e20[]" name = "e20[]" value = "<?php echo sqltoalmdatetom($foo['e20']); ?>">
В основном это дает флажку имена e19 [i0], e19 [i1], e19 [i2], e19 [i3] и так далее. Вход должен называться e20 [] [0], e20 [] [1], e20 [] [2], e20 [] [3] и так далее.
Когда флажок установлен, мне нужно проверить, не является ли случай слишком дорогим по сравнению с тем, на что застрахован заказчик. Если это слишком дорого, и флажок, и поле ввода должны быть сняты, в противном случае следует установить флажок, а на входе должна отображаться сегодняшняя дата.
Моя проблема в том, что я не могу найти правильное имя в jQuery, чтобы я мог изменить 2 поля.
Мой jQuery похож на этот
$(document).ready(function() {
var kreHint = $("#kreHint");
var tekst_kredit_over_max = "Den samlede kreditbelastning inkl. denne sag overstiger kundens maksimale kreditbeløb. Det samlede beløb lyder på ";
var tekst_kredit_under_max = "Aktuel kreditvurdering ";
$(".check_kredit").click(function() { //Class selector
var chkbox = $(this).attr('name'); //<--- This returns the correct name of the checkbox
console.info(chkbox);
var salgspris = $(this).data("pris"); //Henter data-pris (DOM) property, i dette tilfælde indeholdende etapens pris
$.get("/getkredit.php?k=<?=$res['kunde_id']?>", function(response){
if (!(response == null)) {
var kreditbelastning = parseInt(response.kreditbelastning);
var kreditmax = parseInt(response.kreditmax);
var samlet_kreditbelastning = kreditbelastning + salgspris;
console.info("Kreditbelast: "+kreditbelastning);
console.info("Salgspris :"+salgspris);
console.info("Kreditmax :"+kreditmax);
console.info("Samlet kreditbelast :"+samlet_kreditbelastning);
if (kreditmax > samlet_kreditbelastning) {
kreHint.html(tekst_kredit_under_max + samlet_kreditbelastning); //Skriver tekst
} else {
kreHint.html(tekst_kredit_over_max + samlet_kreditbelastning); //Skriver tekst
console.info("#"+chkbox);
$("#e19[i1]").prop('checked', false); //<--- this should be dynamical, not even this hardcorded name/id works???
$("#kreHint, #r599b").css({
"color" : "red",
"font-size" : "16px",
"font-weight" : "bold"
});
}
}
});
});
});
Что я делаю не так и что мне делать вместо этого?

Попробуйте селектор jQuery attribute, как показано ниже:
$("[name='" + chkbox + "']").prop('checked', false);
Узнать больше о селекторах jQuery
Используя селектор id с [ или ], вам необходимо добавить \\ перед ним.
//$("#e19\\[i1\\]").prop('checked', false);
$("#" + chkbox.replace("[", "\\[").replace("]", "\\]")).prop('checked', false);
Потому что, когда вы используете #, он найдет элемент с id, равным этому значению. Но у вашего элемента нет id как e19[i0], но это атрибут name.
У меня есть имя и идентификатор, и это одно и то же: name = "e19 [i <? Php echo $ taeller-1;?>]" Id = "e19 [i <? Php echo $ taeller-1;?> ] ". ЕСЛИ я изменил [имя на [id, он все еще работает ?????
и как мне ввести значение в поле ввода?
насчет ввода я изменил его идентификатор на этот: <input type = "text" readonly class = "listform" style = "width: 60px;" id = "e20 [<? php echo $ taeller-1;?>]" name = "e20 []" value = "<? php echo sqltoalmdatetom ($ foo ['e20']);?>">. Тогда я могу поймать это и манипулировать им.
Для входа $("[id='" + chkbox.replace("e19[i","e20[") + "']").val(new Date())
Выяснилось, что я могу сделать то же самое, что и для текстового поля, точно так же, как флажок: $ ("[id = '" + datefield + "']"). Val (''); если мне нужно, чтобы он был пуст. Но я все еще не понимаю, почему я не могу это сделать $ ("# e19 [i1]"). Prop ('checked', false); для флажка, когда у меня есть идентификатор.
Как вы можете видеть в моем ответе, селектор attribute использует [] для выбора значений. Таким образом, jquery будет рассматривать [ или ] как часть selector, а не как часть id. Если вы хотите использовать его в id selector, вы можете добавить к нему \\ , как $("#e19\\[i1\\]").prop('checked', false); , тогда он будет работать.
Хорошо, это сработало, но почему? Я тоже пробовал это: var chkboxobj = $ (this); var tmpnavn = "#" + chkboxobj.attr ('id'); console.info (tmpnavn); $ (tmpnavn) .prop ('проверено', ложь); но это тоже не сработало.