jQuery .change()不起作用

时间:2016-02-09 13:10:44

标签: jquery

在我的html结构中,我有加号,减号和输入字段。当我的输入字段发生任何变化时,我想提醒“发生变化”。因此,当我通过键入或使用向上或向下箭头更改输入框中的值时,它会向我发出警报。但是当我点击带有加号或减号的锚标签时,我已经写了一些代码来改变输入字段的值。因此,当我使用锚标签但是没有触发更改功能时,值会发生变化。因此没有得到任何警报。所以,任何人都可以让我知道为什么改变不起作用。

HTML

<div class="quantity">
    <a href="javascript:void(0)" class="minus">-</a>
    <input type="number" step="1" name="quantity" value="2" title="Qty" class="input-text qty text" size="4">
    <a href="javascript:void(0)" class="plus">+</a>
</div>

JQuery:

$(".plus").click(function() {
    var text = $(this).prev("input");
    var va = parseInt(text.val(), 10) + 1;
    text.attr('value',parseInt(text.val(), 10) + 1);
});

$(".minus").click(function() {
    var text = $(this).next("input");

    if(text.val() > 0){
      var va = parseInt(text.val(), 10) - 1;
      text.attr('value',parseInt(text.val(), 10) - 1);  
    }   
});

jQuery检测输入的变化:

jQuery(document).ready(function($) {
    $(document).on( 'change', '.quantity .qty', function() {

         alert('change occurred');
    });
});

我尝试了什么

我已经尝试过:.trigger('change')并且还使用了keyup和input但没有任何帮助。

3 个答案:

答案 0 :(得分:2)

以编程方式更新元素值时,不会触发change事件。在这种情况下,您需要手动触发事件:

$(".plus").click(function() {
    var $text = $(this).prev("input");
    var value = parseInt($text.val(), 10) + 1;
    $text.val(value).change();
});

$(".minus").click(function() {
    var $text = $(this).next("input");
    var value = parseInt($text.val(), 10) - 1;
    $text.val(Math.max(0, value)).change();
});

Example fiddle

请注意,在使用val()类型时,使用input而不是设置attr(),这被认为是更好的做法。

答案 1 :(得分:1)

<强> FIDDLE

更改您的代码如下。您需要trigger() .change()事件。

$(".plus").click(function() {
    var text = $(this).prev("input");
    var va = parseInt(text.val(), 10) + 1;
    text.attr('value',parseInt(text.val(), 10) + 1);
    text.trigger("change");
});

$(".minus").click(function() {
    var text = $(this).next("input");

    if(text.val() > 0){
      var va = parseInt(text.val(), 10) - 1;
      text.attr('value',parseInt(text.val(), 10) - 1);    
      }
      text.trigger("change");
});

答案 2 :(得分:0)

试试这个..

开始观察'input'事件而不是'change'。

jQuery('#some_text_box').on('input propertychange paste', function() {
// do your stuff
});

@WebFilter(filterName = "SessionFilter", urlPatterns = {"/*"})
public class SessionFilter implements Filter {...}