当val()改变时,JS触发事件

时间:2013-12-17 14:52:41

标签: javascript jquery html css

问:如何在从onkey事件更改val时触发事件?

问题:更改一个输入时,其他会更改值,但不要更改css。

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);
});

4 个答案:

答案 0 :(得分:3)

在这一行

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

添加.trigger("change");以确保触发change事件:

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

小提琴:

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

答案 1 :(得分:1)

您需要在设置值后触发更改事件。查看您的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');
    });
});

答案 2 :(得分:0)

在您的代码中,$(this)引用当前更改的jQuery对象。 一个简单的解决方案是:

$(".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");
    }

编辑:根据你想要发生的事情,@ Anton可能会产生你想要的效果;我不确定你需要什么 至于其他输入框没有变化的原因,说明仍然相同。

答案 3 :(得分:0)

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");
        }

    })
 }

并在keyup上调用该函数

DEMO