[英]jQuery input field .val() is undefined
I'm having a problem with an error: jQuery input val() is undefiend.我遇到了一个错误问题:jQuery input val() is undefiend。 I have 3 inputs which are referring to one item.我有 3 个输入,它们指的是一个项目。
On add Row i can add an new Item ( 3 rows ).在添加行时,我可以添加一个新项目(3 行)。
All those rows have to be prepared in array to be sent to a PHP file.所有这些行都必须在数组中准备好才能发送到 PHP 文件。
I believe that my id="item[0]['name']"
is wrong.我相信我的id="item[0]['name']"
是错误的。
$(document).ready(function() { var counter = 1; $("#addRow").click(function() { $("#ItemContainer").append(` <div class="item"> <div><input type="text" id="item[${counter}]['name']" placeholder="Name" ></div> <div><input type="text" id="item[${counter}]['amount']" placeholder="Amount" ></div> <div><input type="text" id="item[${counter}]['count']" placeholder="Count" ></div> <div></div> </div> `); counter = counter + 1; }); $("#setKasse").click(function() { for (let i = 0; i <= (counter - 1); i++) { console.log($(`#item[${i}]`)); console.log($(`#item[${i}]["name"]`).val()); }; }); });
*{ padding: 0; margin: 0; } body{ background-color: #E6E6FA; color : #191970; padding-left : 5%; padding-top : 70px } #Container, #ItemContainer, .item { width: 20%; display: grid; grid-template-columns: 1fr; grid-template-rows: auto; row-gap : 18px; } #ItemContainer, .item{ width: 100%; row-gap : 2px; } input{ height: 30px; width: 100%; border: none; box-sizing: border-box; padding-left: 4px; font-size: 14px; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div id="Container"> <div><button id="addRow"> Add Row </button></div> <div id="ItemContainer"> <div class="item"> <div><input type="text" id="item[0]['name']" placeholder="Name" ></div> <div><input type="text" id="item[0]['amount']" placeholder="Amount" ></div> <div><input type="text" id="item[0]['count']" placeholder="Count" ></div> <div></div> </div> </div> <div><button id="setKasse"> Set Kasse </button></div> </div>
My main goal is to send the data via Ajax Post request, and for that I want to refactor the Array in another Format.我的主要目标是通过 Ajax Post 请求发送数据,为此我想以另一种格式重构数组。
In selectors, [
is used to indicate an attribute selector.在选择器中, [
用于表示属性选择器。 If you want to use it as a literal character in the ID, you need to escape it with backslash.如果要将其用作 ID 中的文字字符,则需要使用反斜杠对其进行转义。 You also need to escape the '
characters.您还需要转义'
字符。
You also need to include the ['name']
part of the ID (or ['amount']
or ['count']
if you want to get those inputs).您还需要包含 ID 的['name']
部分(或者['amount']
或['count']
如果您想获得这些输入)。
$(document).ready(function() { var counter = 1; $("#addRow").click(function() { $("#ItemContainer").append(` <div class="item"> <div><input type="text" id="item[${counter}]['name']" placeholder="Name" ></div> <div><input type="text" id="item[${counter}]['amount']" placeholder="Amount" ></div> <div><input type="text" id="item[${counter}]['count']" placeholder="Count" ></div> <div></div> </div> `); counter = counter + 1; }); // end of $("#addRow").click $("#setKasse").click(function() { for (let i = 0; i <= (counter - 1); i++) { console.log($(`#item\\\\[${i}\\\\]\\\\[\\\\'name\\\\'\\\\]`).val()); } }); });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div id="Container"> <div><button id="addRow"> Add Row </button></div> <div id="ItemContainer"> <div class="item"> <div><input type="text" id="item[0]['name']" placeholder="Name"></div> <div><input type="text" id="item[0]['amount']" placeholder="Amount"></div> <div><input type="text" id="item[0]['count']" placeholder="Count"></div> <div></div> </div> </div> <div><button id="setKasse"> Set Kasse </button></div> </div>
In my opinion, it's best to avoid using characters that have special meaning in CSS selectors in your IDs, it complicates the code unnecessarily.在我看来,最好避免在 ID 中使用 CSS 选择器中具有特殊含义的字符,这会不必要地使代码复杂化。 You could use id="item-${counter}-name"
.您可以使用id="item-${counter}-name"
。 Or don't use IDs for dynamically created elements at all.或者根本不为动态创建的元素使用 ID。 Use a class like class="name"
, and then use dynamic indexing.使用class="name"
类的class="name"
,然后使用动态索引。 $(".item").eq(i).find("input.name")
. $(".item").eq(i).find("input.name")
。
$(document).ready(function() { var counter = 1; $("#addRow").click(function() { $("#ItemContainer").append(` <div class="item"> <div><input type="text" class="name" placeholder="Name" ></div> <div><input type="text" class="amount" placeholder="Amount" ></div> <div><input type="text" class="count" placeholder="Count" ></div> <div></div> </div> `); counter = counter + 1; }); // end of $("#addRow").click $("#setKasse").click(function() { for (let i = 0; i < counter; i++) { console.log($(".item").eq(i).find(".name").val()); } }); });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div id="Container"> <div><button id="addRow"> Add Row </button></div> <div id="ItemContainer"> <div class="item"> <div><input type="text" class="name" placeholder="Name"></div> <div><input type="text" class="amount" placeholder="Amount"></div> <div><input type="text" class="count" placeholder="Count"></div> <div></div> </div> </div> <div><button id="setKasse"> Set Kasse </button></div> </div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.