【发布时间】:2020-06-22 12:11:42
【问题描述】:
在一个用于注册房间和二手产品的 Web 应用程序中,我生成了一个包含多个输入字段的行列表(参见代码 #1)。该代码只是添加了带有一些输入字段的行。使用 PHP 生成的动态下拉列表也在代码中回显(另请参见代码 #1)。
行生成良好,下拉列表运行正常。但是,该代码用于将产品添加到订单中。这些产品在数据库中有一个默认价格(可以由不同的页面编辑......)。
生成的每一行看起来都像代码 #2,但是为了便于阅读而进行了调整。当我从列表中选择产品时,其他 2 个字段必须插入价格。仅用于更改此订单价格的输入字段和仅供参考的文本部分。
代码 #3 显示了创建调用并在所需位置返回值的代码部分。
这段代码在第一行的效果很好,但是当我更改任何其他下拉列表的第二行时,没有任何变化。
我的问题是,当我在生成的任何下拉列表中选择任何产品以将价格显示到相应的输入字段/div 中时,我该如何使其工作?
我没有一个线索来解决这个问题。请帮忙。
编辑 1:代码 #2 和 #3 更改为使用 'class' 而不是 'id'。作为一个坏人,我在多次使用相同的字段时确实使用了 id 而不是类......请原谅我的愚蠢错误。但这并不能解决即使我多次添加该行也只修改第一行的问题。
也许在不同的地方问我的问题会让我更容易理解我的问题,而代码保持不变。
我有几行带有 PHP 生成的选择框、一个空的输入框类型编号和一个空的 div,仅供参考。
虚拟模式示例:
<select class product></select><input type="number" name="price[]" class="price"><div class="ajaxprice">
<select class product></select><input type="number" name="price[]" class="price"><div class="ajaxprice">
<select class product></select><input type="number" name="price[]" class="price"><div class="ajaxprice">
<select class product></select><input type="number" name="price[]" class="price"><div class="ajaxprice">
这些行是使用代码 #1 添加的,而第一行已经在带有“添加”按钮而不是“删除”按钮的页面上。当我更改第一行中的选择时,代码#3 中的脚本很好地填充了输入和 div。如果更改其他行之一,则根本没有任何变化。也不是我出于测试目的插入的警报。那么如何将所需的信息输入到div中并在我更改第n个选择框时输入呢?
代码 #1: 使用输入字段插入和删除行
var max_rows = 10; // maximum input fields
var wrapper = $("#wrapper_rows");
var counter = 1;
$(".rowBtn").click(function (e) {
e.preventDefault();
if (counter < max_rows) {
counter++;
var row = 'some lay out';
row = row + '<?php echo get_products_add($con, $com); ?>';
row = row + 'some futher layout / closing tags';
$(wrapper).append(row );
}
})
$(wrapper).on("click",".rowminBtn", function(e){
e.preventDefault();
$(this).parent('div').parent('div').remove(); counter--;
})
代码 #2
<select class="product" name="product[]" >// LOADS OF OPTIONS</select>
<input type="number" class="price" name="price[]">
<div class="ajaxprice"></div>
代码 #3
$(".product").change(function () {
var productid = $('.product').val();
if (productid != '') {
$.ajax({
url:"get_price.php",
method:"POST",
data: { id:productid },
dataType:"json",
success:function(result){
$(".ajaxprice").html("(Original price: " + result + ")");
$(".price").val(result);
}
})
}
else {
$(".ajaxprice").html('');
$(".price").val("");
}
})
【问题讨论】:
-
当您说“生成的每一行看起来像代码 #2”时,每一行是否都有一个 ID 为
product的输入? ID 在您的页面上必须是唯一的。如果您有多行,每行都包含一个 ID 为product的输入,那么您在 jquery 中的选择器将无法正常工作!当您选择$("#product")时会发生什么,您总是选择具有该 id 的第一个元素。将id='product'更改为class="product"您也必须更改选择,但这超出了评论的范围 -
所有这些行都有相同的 id,因为下拉菜单都是用相同的 php 代码创建的。但是只有当我能够向 php 函数添加一个数字时,才有可能给出不同的名称。但这是不可能的,因为我将 php 函数回显到 jquery 代码中。我无法将任何数字调整到那个数字中。
-
您不必更改
id- 值,您需要使用class='product'而不是id='product'。price和ajaxprice输入字段也是如此。 -
@El_Vanja 我已将代码更改为类。您的回复指向一个问题,但您的链接指向某种概述。
-
@Lapskaus 将 ids 更改为 classess 不会更改我在代码中的结果。仍然只有第一行正在改变。我确实在我的问题中添加了一些附加信息。