jq 获取节点

clipboard.png

我点击+号的时候 怎么让当前的li中的input 加 1?

这是部分代码
html

<li class="first">
    <div class="number" style="width: 130px;">
        <span style="float: left;padding-top: 20px;">
        <a href="javascript:;" class="reduction_choice_book_number">-</a>
        <input style="margin: 0;" type="text" name="choice_book_number" value="<?php echo empty($output['buy_sgroup_goods_list_array']['goods_num_sum'])?'0':$output['buy_sgroup_goods_list_array']['goods_num_sum'];?>">
        <a href="javascript:;" class="add_choice_book_number">+</a>
        </span>
     </div>
</li>

js代码

$('.add_choice_book_number').click(function(event){
            choice_book_number.val(Number(choice_book_number.val())+1);
            
        });
        

这样点击 + 号 的时候 所有的 input 都加1了 我想知道怎么把每一行的 + 号分别控制每一行的 input 求大神解

阅读 3.7k
8 个回答

这样子肯定是不行的噻
你要先获取点击的this,然后用这个this查找和它同级的input,并修改它的数值
部分代码

let _input =  $(this).parent().find('input');
_input.val(_input.val()++)

由于有多个input,但是点击事件只会写一次,这样的话,就会需要使用到this关键字了,在jq中$(this)指代的是当前添加点击事件的页面元素,所以click事件可以这样写:
如果input针对于当前点击元素是父级元素,可以使用$(this).parent()....知道选择input元素;
如果是同级,上一个兄弟使用$(this).prev();如果是下一个,使用$(this).next();
如果是子集元素,使用$(this).find('');
选择到之后,即可使用number方法,也可以使用val($(this).xxx.val()+1);
另外,一般这种订单类的元素都是动态生成的,添加事件可以使用on()方法;

用this对象来确定是哪一个发生点击事件.通过this对象找到input,在修改值.而不是直接用一个全局的.add_choice_book_number注册事件,在里面获取

var element = $(this).siblings('input');
element.val(Number(element.val() + 1));

siblings是兄弟节点的意思
纯手打,弄错了别怪哈.

这主要就看你的变量choice_book_number是怎么来的了
像楼上说的parent>find或siblings都可以也可以考虑prev

$('.add_choice_book_number').click(function(event){
    var inputEle = $(this).prev();
    inputEle.val(inputEle .val()++); 
});

找到当前元素紧邻的input,然后取值并修改

$('.add_choice_book_number').click(function(event){
  event.preventDefault();
  let input = $(this).prev();
  input.val(input.val()++);
});

你也可以在标签内写一个方法呀,类似这样:
onclick="test(this,其他变量)";
然后下面写一个方法:
test(obj,其他变量){

$(obj).找到你要改变值的那个dom,然后加1即可。

}
纯手打,希望帮到你

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题