如何在没有大量代码的情况下操作单个输入字段值
How to manipulate individual input field values without a lot of code
我用jQuery编写了一些代码,将<input>
字段值从一个单位制转换为另一个单位制(英语<->公制)。 一切都很顺利,直到我意识到我正在使用类选择器,所以不是每个值单独进行转换,所有值(具有相同的类)都转换为相同的值(等于第一次出现class
)。
明显的解决方案是为每个值分配一个id
,我想这会起作用,但我在这里问是否有更好的方法。 我有很多值(这就是我尝试使用类的原因),并且希望尽可能避免使用id
。 但是,我正在寻找的只是"单独转换每个值(使用我的转换函数)"。 如何做到这一点?
jQuery
function convertValues() {
if ($('#unit_system').val() == "English") //if changed to English
{
$('.value_gpm').val( //do converstion from Metric to English
convert($('.value_gpm').val(), "m3h", "gpm")
);
}
else if ($('#unit_system').val() == "Metric") //if changed to Metric
{
$('.value_gpm').val( //do conversion from English to Metric
convert($('.value_gpm').val(), "gpm", "m3h")
);
}
}
调用函数
//below code is for select box (HTML for it is not shown)
$("#unit_system").change(function(){ //select box change detected
convertValues(); //function is called
});
首先是 HTML(在选择框更改之前)
<input type="text" class="value_gpm" name="design_a" value="444" />
<input type="text" class="value_gpm" name="design_b" value="555" />
<input type="text" class="value_gpm" name="design_c" value="666" />
<input type="text" class="value_gpm" name="design_d" value="777" />
<input type="text" class="value_gpm" name="design_e" value="888" />
之后的 HTML(更改"选择"框后)
<input type="text" class="value_gpm" name="design_a" value="1954.87" />
<input type="text" class="value_gpm" name="design_b" value="1954.87" />
<input type="text" class="value_gpm" name="design_c" value="1954.87" />
<input type="text" class="value_gpm" name="design_d" value="1954.87" />
<input type="text" class="value_gpm" name="design_e" value="1954.87" />
预期行为:转换每行产生不同的值
实际行为:每行生成相同的值
只是循环遍历它们,就像这样。
var inputs = $('.value_gpm');
for(i=0;i < inputs.length; i++){
var input = inputs[i];
input.val( convert(input.val(), "m3h", "gpm") );
}
最佳选择-使用$.each
和$(this)
。
$(document).ready(function(){
var valueEls = $('.value_gpm');
$("#unit_system").change(function(){
var unit = $(this).val();
switch(unit){
case "English":
valueEls.each(function(){
$(this).val(convert($(this).val(), "m3h", "gpm");
});
break;
case "Metric":
valueEls.each(function(){
$(this).val(convert($(this).val(), "gpm", "m3h");
});
break;
}
});
});
使用 each()
$("value_gpm").each(function () {
convert(this.val(), ...etc
我为此找出的代码行数较少:
var unit_system = $('#unit_system').val();
$('.value_gpm').each(function(){
convert($(this).val(), unit_system == "English" ? "m3h" : "gpm", unit_system == "English" ? "gpm" : "m3h");
});
你可以使用 jQuery 每个:
$("#unit_system").change(function(){
var fromUnit = "m3h";
var toUnit = "gpm";
if ($(this).val() == "Metric"){
fromUnit = "gpm";
toUnit = "m3h";
}
$('.value_gpm').each(function(){
$(this).val(convert($(this).val(), fromUnit, toUnit));
});
});
相关文章:
- 如何在不使用插件的情况下用程序记录浏览器操作
- 在不更改 HTML 的情况下操作 HTML 字符串的内容
- 试图在没有get/putImageData的情况下操作画布上的alpha
- 如何在不使用主题或命令式操作的情况下管理状态 在一个简单的 RxJS 示例中
- 为什么您可以在不引用“this”的情况下操作对象属性
- 如何在没有服务器端的情况下监视用户操作
- 有没有办法在没有 eval() 的情况下操作包含的 JS
- 是否可以在没有JS的情况下将数据放入操作中
- 操作方法确保在不使用 WebFont 加载器的情况下加载@font面
- 我可以在没有 Redux Thunk 中间件的情况下调度多个操作吗?
- 如果我想在没有jQuery的情况下操作HTML / CSS,我应该应用什么方法
- 在没有 JavaScript 的情况下更改表单操作目标
- 如何在没有大量代码的情况下操作单个输入字段值
- 如何限制用户在没有特定操作的情况下离开页面(例如,单击提交按钮)
- 如何在没有“删除”操作的情况下删除对象的属性
- 如何在不使用指令的情况下操作ng-if内部的元素
- 在不执行浏览器操作的情况下启动chrome扩展
- 如何在不影响AngularJS中原始变量的情况下操作视图值
- 如何在不影响其他项目的情况下操作一组列表组项目
- 在不使用表单操作的情况下调用PHP文件