JS/jQuery: 使用下拉框在另一个字段中设置值,是否正在更改以前的字段?
JS/jQuery: using dropdown box to set values in another field, is altering previous fields?
我的页面有多个下拉菜单供员工选择 select 销售包,这些下拉菜单完全相同。
现在,当用户 select 的销售包说 packageA
时,它会在页面上预填一个字段,其中包含该包的默认金额,例如 100 美元。在下一个下拉列表中,packageA
再次可用于 selection。在下一个下拉列表中,如果用户 selects PackageB
它会使用之前的下拉列表值 $100 预填充金额,这不是正确的套餐价格吗?基本上,货币价值自动填充仅适用于页面上的第一个下拉 selection 框。第一个下拉列表中 select 的任何内容都会更改页面上所有其他包裹的货币字段值吗?
我知道在这种情况下通过 ID
获取元素效率不高,但通过 className
获取元素根本不起作用。
这个 HTML 下拉 select 框在页面上重复了几次。
<!-- this is the dropdown -->
<select id="package-dropdown" class="selectpicker pkg-class">
<option value="">Select</option>
<option data-value="{{ django ID here }}" value="{{ django value here}}">{{django variable here}}.
<option data-value="{{ django ID here }}" value="{{ django value here}}">{{django variable here}}.
<option data-value="{{ django ID here }}" value="{{ django value here}}">{{django variable here}}.
</option>
</select>
<!-- where the monetary value gets prefilled -->
<div class="col-sm-5">
<input min="0" type="number" class="display-package-amount" class="form-control" placeholder="Amount">
</div>
// JS on change function
$(document).on('change','#package-dropdown', function(e) {
let package = document.getElementById("package-dropdown");
// This is where the price gets prefilled based off of the package selected
$(".display-package-amount").val(package.options[package.selectedIndex].getAttribute('data-value'));
});
我在如何使这些实际上彼此独立到每个 select 框与 previous/next 框真正无关的地方苦苦挣扎。任何提示将不胜感激!
您不能在页面中重复 ID,因此请改用 类。
要获取关联的输入,请使用 closest()
遍历到一个共同的父级,然后 find()
您在该父级中需要的内容
$(document).on('change', '.selectpicker', function() {
$(this).closest('.row').find('.display-package-amount').val(this.value)
})
.row {
padding: 1em;
border: 2px solid #ccc;
margin: 1em
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="row">
<select class="selectpicker pkg-class">
<option value="">Select</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<hr/>
<div class="col-sm-5">
<input min="0" type="number" class="display-package-amount" class="form-control" placeholder="Amount">
</div>
</div>
<div class="row">
<select class="selectpicker pkg-class">
<option value="">Select</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<hr/>
<div class="col-sm-5">
<input min="0" type="number" class="display-package-amount" class="form-control" placeholder="Amount">
</div>
</div>
我的页面有多个下拉菜单供员工选择 select 销售包,这些下拉菜单完全相同。
现在,当用户 select 的销售包说 packageA
时,它会在页面上预填一个字段,其中包含该包的默认金额,例如 100 美元。在下一个下拉列表中,packageA
再次可用于 selection。在下一个下拉列表中,如果用户 selects PackageB
它会使用之前的下拉列表值 $100 预填充金额,这不是正确的套餐价格吗?基本上,货币价值自动填充仅适用于页面上的第一个下拉 selection 框。第一个下拉列表中 select 的任何内容都会更改页面上所有其他包裹的货币字段值吗?
我知道在这种情况下通过 ID
获取元素效率不高,但通过 className
获取元素根本不起作用。
这个 HTML 下拉 select 框在页面上重复了几次。
<!-- this is the dropdown -->
<select id="package-dropdown" class="selectpicker pkg-class">
<option value="">Select</option>
<option data-value="{{ django ID here }}" value="{{ django value here}}">{{django variable here}}.
<option data-value="{{ django ID here }}" value="{{ django value here}}">{{django variable here}}.
<option data-value="{{ django ID here }}" value="{{ django value here}}">{{django variable here}}.
</option>
</select>
<!-- where the monetary value gets prefilled -->
<div class="col-sm-5">
<input min="0" type="number" class="display-package-amount" class="form-control" placeholder="Amount">
</div>
// JS on change function
$(document).on('change','#package-dropdown', function(e) {
let package = document.getElementById("package-dropdown");
// This is where the price gets prefilled based off of the package selected
$(".display-package-amount").val(package.options[package.selectedIndex].getAttribute('data-value'));
});
我在如何使这些实际上彼此独立到每个 select 框与 previous/next 框真正无关的地方苦苦挣扎。任何提示将不胜感激!
您不能在页面中重复 ID,因此请改用 类。
要获取关联的输入,请使用 closest()
遍历到一个共同的父级,然后 find()
您在该父级中需要的内容
$(document).on('change', '.selectpicker', function() {
$(this).closest('.row').find('.display-package-amount').val(this.value)
})
.row {
padding: 1em;
border: 2px solid #ccc;
margin: 1em
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="row">
<select class="selectpicker pkg-class">
<option value="">Select</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<hr/>
<div class="col-sm-5">
<input min="0" type="number" class="display-package-amount" class="form-control" placeholder="Amount">
</div>
</div>
<div class="row">
<select class="selectpicker pkg-class">
<option value="">Select</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<hr/>
<div class="col-sm-5">
<input min="0" type="number" class="display-package-amount" class="form-control" placeholder="Amount">
</div>
</div>