简体   繁体   English

val()更改时的JS触发事件

[英]JS trigger event when val() change

Q: How to trigger event when val is changed from onkey event? 问:从onkey事件更改val时如何触发事件?

Problem: When change one input, other will change value, but don't change css. 问题:更改一个输入时,其他输入将更改值,但不更改CSS。

JsFiddle: http://jsfiddle.net/6Qnbh/ JsFiddle: http : //jsfiddle.net/6Qnbh/

$('.stat').val(0);

$(".stat").change(function () {
    var val = $(this).val();
    if (val > 0) {
        $(this).css("border", "1px solid #0f0");
    } else if (val < 0) {
        $(this).css("border", "1px solid #f00");
    } else {
        $(this).css("border", "1px solid #000");
    }

}).trigger("change");

/**/

$('.stat').keyup(function () {
    var val = $(this).val();
    if (val > 0) {
        var num = Math.abs(val) * -1;
    } else {
        var num = Math.abs(val) * 1;
    }
    $('input[data-id=' + $(this).attr("data-link") + ']').val(num);
});

On this line 在这条线上

    $('input[data-id=' + $(this).attr("data-link") + ']').val(num);

Add .trigger("change"); 添加.trigger("change"); to ensure the change event is triggered: 确保change事件被触发:

    $('input[data-id=' + $(this).attr("data-link") + ']').val(num).trigger("change");

Fiddle: 小提琴:

http://jsfiddle.net/6Qnbh/4/ http://jsfiddle.net/6Qnbh/4/

You need to trigger the change event after setting the value. 设置值后,需要触发更改事件。 See your updated fiddle 查看更新的小提琴

$(function () {
        $('.stat').val(0);

    $(".stat").change(function () {
        var val = $(this).val();
        if (val > 0) {
            $(this).css("border", "1px solid #0f0");
        } else if (val < 0) {
            $(this).css("border", "1px solid #f00");
        } else {
            $(this).css("border", "1px solid #000");
        }

    }).trigger("change");

    /**/

    $('.stat').keyup(function () {
        var val = $(this).val();
        if (val > 0) {
            var num = Math.abs(val) * -1;
        } else {
            var num = Math.abs(val) * 1;
        }

        // I have added the .trigger('change') part here
        $('input[data-id=' + $(this).attr("data-link") + ']').val(num).trigger('change');
    });
});

In your code, $(this) refers to the currently changed jQuery object. 在您的代码中,$(this)指向当前更改的jQuery对象。 An easy solution is: 一个简单的解决方案是:

$(".stat").change(function () {
    var val = $(this).val();
    if (val > 0) {
        $('.stat').css("border", "1px solid #0f0");
    } else if (val < 0) {
        $('.stat').css("border", "1px solid #f00");
    } else {
        $('.stat').css("border", "1px solid #000");
    }

Edit: depending on what you want to happen, @Anton may have the effect you are looking for; 编辑:根据您想要发生什么,@ Anton可能会产生您想要的效果; I wasn't certain what you need. 我不确定你需要什么。
As for the reason why the other input box doesn't change, the explanation is still the same. 至于其他输入框未更改的原因,说明仍然相同。

function test(){
    $(".stat").each(function () {
        var val = $(this).val();
        if (val > 0) {
            $(this).css("border", "1px solid #0f0");
        } else if (val < 0) {
            $(this).css("border", "1px solid #f00");
        } else {
            $(this).css("border", "1px solid #000");
        }

    })
 }

and call the function on keyup 并在keyup上调用该函数

DEMO DEMO

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM