2013-12-17 101 views
2

問:如何在val從onkey事件更改時觸發事件?當val()更改時發生JS觸發事件

問題:當更改一個輸入時,其他將更改值,但不更改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); 
}); 
+0

的'change'事件是在默認情況下,只有當用戶直接改變元素髮送。這是一個設計決定,應該防止_endless loops_。修復用戶輸入的價值。如果事件是由用戶或代碼觸發的,它也可以通過標記進行處理,但是決定是這些事件僅在用戶交互時觸發,並且您需要決定是否要發起事件當你改變價值時你自己。 –

回答

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/

+0

反對的任何理由? – iambriansreed

+0

自2013年以來,令人驚歎的隨機下跌行情一直在持續。 –

0

在代碼中,$(這)是指當前更改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可能您正在尋找的效果是什麼;我不確定你需要什麼。
至於其他輸入框不變的原因,說明仍然是一樣的。

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

相關問題