2016-04-11 4 views
3

私のコードの複数の部分では、アイテムの値を更新する必要があります。いずれの場合でも、私は「変更」イベントを発生させたいと思っています。アイテムを更新して変更をトリガーする(無効かどうかにかかわらず)

私はjQuery式と新しい値に対応する項目を新しい値に設定する関数が必要です。それらに「変更」イベントを発生させます。アイテムが無効になっている場合、無効にしておく必要があります。

のjQuery 1.7.1

答えて

2

私は<input>読み取り専用の代わりに、無効にするために、あなたをお勧めしたいです。

Demo

$("#form").on("change", ".all", function() { 
 
    $("#feedback").append($(this).attr("id") + " changed<br>"); 
 
}); 
 

 
$(".all") 
 
    .val("new value") 
 
    .trigger("change");
input[readonly] { 
 
    background: #ccc; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script> 
 
<div id="form"> 
 
    Item1 = 
 
    <input id="item1" class="all"> 
 
    <br>Item2 = 
 
    <input id="item2" class="all" readonly /> 
 
    <!--       ^^^^^^^^ --> 
 
    <p id="feedback"> 
 
</div>

+0

Good one Tushar .. – Rayon

1

これは私が現時点で持っているものです。それはもっと良い方法があるかどうかを見て欲しいと思って私には優しく思えます:

function updVal (qry, nwVal) { 

    $(qry+":not([disabled])") 
    .val(nwVal) 
    .trigger("change"); 

    // we need to temporarily enable then disable the disabled items 
    // in order for the change event to fire 
    $(qry+":disabled") 
    .val(nwVal) 
    .prop("disabled",false) 
    .trigger("change") 
    .prop("disabled",true); 

} 

updVal("#myreport input[data-x='bla']", "new value"); 
+0

あなたは 'change'ハンドラを起動したい場合は、'は.call(ELEMENT) ''このコンテキストを持っていると 'handler'機能だけで呼び出すことができます'要素'として ' – Rayon

+0

@レイヨンダブレ、私は別の答えでそれを詳しく説明することができますか? –

+0

@RayonDabre、私は '$(qry).val(nwVal).change.call(this);'を試みましたが、 "Uncaught TypeError:this.triggerは関数ではありません"という文句を言います。 –

関連する問題