简体   繁体   English

jQuery 输入字段 .val() 未定义

[英]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>
So, I want a way to be able to cycle and loop into objects|Arrays 所以,我想要一种能够循环和循环到对象|数组的方法

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM