无法获取最接近的数字输入字段值

时间:2019-11-15 10:51:00

标签: jquery

当试图获取最接近按钮的输入字段的值时,结果一直是不确定的。

我已经尝试过了:

class RValueReplacementListener(ParseTreeListener):
    replacements = 0
    r_mapping = {}
    rewriter = None

    def __init__(self, tokens):
        self.rewriter = TokenStreamRewriter(tokens)

    // Code removed for the sake of brevity

    # Enter a parse tree produced by JavaParser#integerLiteral.
    def enterIntegerLiteral(self, ctx:JavaParser.IntegerLiteralContext):
        hex_literal = ctx.HEX_LITERAL()
        if hex_literal is not None:
            int_literal = int(hex_literal.getText(), 16)
            if int_literal in self.r_mapping:
                # print('Replace: ' + ctx.getText() + ' with ' + self.r_mapping[int_literal])
                self.rewriter.replaceSingleToken(ctx.start, self.r_mapping[int_literal])
                self.replacements += 1

这:

$('button.add_to_cart_button.button.ajax_add_to_cart').on('click', function() {
        var v = $(this).closest('div.quantity').find("input[name='quantity']").val();
        console.log(v);
});

但是如上所述,我只是得到了“未定义”。

这是html:

$('button.add_to_cart_button.button.ajax_add_to_cart').on('click', function() {
       var v = $(this).closest( '.input-text.qty' ).val();
       console.log(v);
});

2 个答案:

答案 0 :(得分:2)

您必须使用$(this).prev('div.quantity'),因为.quantity不是按钮的父项,而是同级项。

如果您的按钮位于.quantity的内部 ,您的代码将起作用。

演示

$('button.add_to_cart_button.button.ajax_add_to_cart').on('click', function() {
  var v = $(this).prev('div.quantity').find("input[name='quantity']").val();
  console.log(v);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="quantity">
  <label class="screen-reader-text" for="quantity_5dce7f0dc2a65">Some label</label>
  <input type="number" class="input-text qty text" step="1" min="0" max="" name="quantity" value="1" title="Qty" size="4" inputmode="numeric">
</div>
<button type="submit" data-product_id="123" data-quantity="1" class="add_to_cart_button button ajax_add_to_cart">Buy</button>

答案 1 :(得分:1)

像这样更改您的html标记:

<div class="quantity">
    <label class="screen-reader-text" for="quantity_5dce7f0dc2a65">Some label</label>
    <input type="number" class="input-text qty text" step="1" min="0" max="" name="quantity" value="1" title="Qty" size="4" inputmode="numeric">

    <button type="submit" data-product_id="123" data-quantity="1" class="add_to_cart_button button ajax_add_to_cart">Buy</button>
</div>

或使用prev() jQuery函数,如下所示:

$('button.add_to_cart_button.button.ajax_add_to_cart').on('click', function() {
    var v = $(this).prev().find("input[name='quantity']").val();;
    console.log(v);
});