我的产品页面上有两个字段,使用的是' .qty'。我想要实现的是当我在任一输入字段中输入值时,这两个输入字段都填充了该值。
我目前的代码是:
<button id="btn" onclick="download(http://imageurl) value ="download"><button>
<script>
function download(url){
console.log(url);
var link = document.createElement('a');
link.href = url;
link.download = "image.jpg";
document.body.appendChild(link);
link.click();}
</script>
我在输入文本元素中使用function updateProductAmount() {
jQuery('.add-to-cart .qty').each(function() {
var productAmount = this.value;
jQuery('.add-to-cart .qty').val(productAmount);
// Requires more work.
});
}
调用此代码。
此代码只能以一种方式运行。更改第一个输入元素时,它会将值复制到最后一个输入元素。但是,当最后一个输入元素发生更改时,它会更改回第一个输入元素的值。
有人能指出我做错了什么并帮助我吗?
提前致谢。
答案 0 :(得分:1)
尝试以下方法:
$(document).on('change','.add-to-cart .qty', function(){
$('.add-to-cart .qty').val($(this).val());
});
答案 1 :(得分:0)
尝试将使用过的输入字段作为参数传递。 例如: 检查使用了哪个字段。 您还可以将引用传递给第二个字段(如果您打算坚持使用两个字段。沿线的某些内容应该可以解决这个问题
<input type="text" value="" name="qty" class="qty" onchange="updateProductAmount(this, jQuery('.add-to-cart'))"/>
<input type="text" value="" name="add-to-cart" class="add-to-cart" onchange="updateProductAmount(this, jQuery('.qty'))"/>
并在脚本部分
function updateProductAmount(caller, fieldToChange) {
jQuery(fieldToChange).val(caller.value);
}
答案 2 :(得分:0)
如果我理解,您需要更改兄弟姐妹
的值jQuery( '.add-to-cart .qty' ).on( 'change' , function () {
jQuery( this ).siblings().val( jQuery( this ).val() );
} );
答案 3 :(得分:0)
试试这个:
$(document).ready(function() {
$(".qty").on("input",function(){
$(".qty").not($(this)).val($(this).val());
})
})
最终代码:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<input type="text" class="qty" value="" />
<input type="text" class="qty" value="" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(document).ready(function() {
$(".qty").on("input",function(){
$(".qty").not($(this)).val($(this).val());
})
})
</script>
</body>
</html>
答案 4 :(得分:0)
jQuery&#39; s each()
中this
的值是此each()
迭代的对象值,而不是触发事件的元素。在输入each()
之前,您需要存储要更改输入的值。
然后使用带有each()
的第二个jQuery语句和相同的选择器来更改值。这会导致所有值首先更改为第一个<input>
的值,然后更改为第二个<input>
的值,然后更改为第三个,等等。当您将所有<input>
值更改为第二个<input>
的值时,第二个<input>
的值已经更改为值{第一个<input>
。实际上,这导致所有<input>
s跟随第一个<input>
的值,而不能更改除第一个之外的任何输入。
显示this
中each()
的价值的示例:
$('.add-to-cart input.qty').on('input', updateProductAmount);
function updateProductAmount() {
$('.add-to-cart input.qty').each(function() {
console.log('This points to id: ' + this.id + " ::value=" + this.value);
var productAmount = this.value;
$('.add-to-cart .qty').val(productAmount);
// Requires more work.
});
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="add-to-cart">
<input class="qty" id="firstInput">
<input class="qty" id="secondInput">
</div>
&#13;
最低限度更改,功能性:在productAmount
之前存储each()
:
$('.add-to-cart input.qty').on('input', updateProductAmount);
function updateProductAmount() {
var productAmount = this.value;
$('.add-to-cart input.qty').each(function() {
$('.add-to-cart .qty').val(productAmount);
// Requires more work.
});
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="add-to-cart">
<input class="qty" id="firstInput">
<input class="qty" id="secondInput">
</div>
&#13;
此外:
.not($(this))
将其从您使用each()
进行迭代的jQuery对象中删除。您可能正在迭代非<input>
s的元素。您可以将选择器更改为仅选择<input>
元素。
从var productAmount = this.value;
中删除each()
后,不再需要使用each()
显式迭代jQuery对象。您可以使用jQuery的隐式迭代来使用val()
更改value
。
$('.add-to-cart input.qty').on('input', updateProductAmount);
function updateProductAmount() {
var productAmount = this.value;
$('.add-to-cart input.qty').not($(this)).val(productAmount);
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="add-to-cart">
<input class="qty" id="firstInput">
<input class="qty" id="secondInput">
</div>
&#13;
each()
,this
将引用触发事件的元素。因此,不需要首先将值存储在单独的变量中。但是,如果您希望迭代大量数量的元素,那么使用单独的变量将比在每次迭代中从元素获取value
稍快一些。最终代码:
$('.add-to-cart input.qty').on('input', updateProductAmount);
function updateProductAmount() {
$('.add-to-cart input.qty').not($(this)).val(this.value);
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="add-to-cart">
<input class="qty" id="firstInput">
<input class="qty" id="secondInput">
</div>
&#13;
答案 5 :(得分:0)
这是你想要做的JS小提琴。
function updateProductAmount() {
$('.qty').val($(this).val());
}
$(".qty").change(updateProductAmount);
答案 6 :(得分:0)
这里的问题是您要为每个输入设置每个值。如果您跟踪代码,您将看到如下内容:
现在,正如您所看到的,如果更改了第二个输入,则会发生相同的操作顺序。这意味着将首先检查第一个输入,并将其值赋予与选择器匹配的所有输入,用第一个输入覆盖第二个输入的值。因此,第二个输入的值是什么并不重要,因为当.each到达那里时,它已经被输入1的值覆盖了。
正如其他人所说,这里的解决方案是简单地找到你想用jQuery更新的所有匹配元素,并将它们设置为this.value。使用jQuery val函数更新所有匹配元素的值,无需使用.each循环:
function updateProductAmount() {
$('.add-to-cart .qty').val(this.value);
}