2012-03-29 19 views
6

3つの入力フィールドに依存する計算を実行するダイアログがあります。いずれかが変更されると、すべてが満たされているかどうか、処理されているかどうかがチェックされ、応答が返されます。jQuery .change()イベントがIEで起動しない

FF、Chrome、Operaなどでは正常に動作しますが、どのバージョンのIEでも動作が停止します。残りのjQueryは正常に動作しますが、ここでどこに問題があるのか​​正確にはわかりません。私はそれが.change()イベントまたは複数のイベントバインディングと関係があるかもしれないと思うが、私は本当に知らない。

ここで問題のあるコードです:

var loan = $("#ltv-loan-amount"); 
var mortgage = $("#ltv-mortgage"); 
var property = $("#ltv-property"); 

$("#ltv-dialog input").change(function() { 
    if(loan.val() && mortgage.val() && property.val()) 
    { 
     var ltv = parseInt(((parseInt(loan.val()) + parseInt(mortgage.val()))/parseInt(property.val()))* 1000); 
     ltv /= 10; 
     if(ltv > 0 && ltv < 85) 
     { 
      $("#ltv-result").html("<span id=\"ltv-form-result\">" + ltv + "%</span></p><p><a id=\"ltv-link\" href=\"#sidebar-head\">Congratulations, your LTV has passed. Please now proceed with your application opposite.</a>"); 
      $("#amount").val(loan.val()); 
      $("#mortgage_balance").val(mortgage.val()); 
      $("#prop_value").val(property.val()); 
      $("#ltv-link").click(function() { 
       $("#ltv-dialog").dialog("close"); 
      }); 
     } 
     else if (ltv > 84) 
     { 
      $("#ltv-result").html("<span id=\"ltv-form-result\">" + ltv + "%</span></p><p>Unfortunately your LTV is greater than 85%. You may still qualify for a loan if you reduce the loan amount."); 
     } 
     else 
     { 
      $("#ltv-result").html("</p><p>Please check your input above as you currently have a negative ltv."); 
     } 
    } 
}); 

、問題のHTML:

<div id="ltv-dialog" title="Do You Qualify for a Loan?"> 
    <p>Please enter the fields below and your LTV will be calculated automatically.</p> 
    <div id="ltv-form"> 
     <div class="ltv-row"> 
      <label for="ltv-loan-amount">Loan Amount:</label> 
      <input type="text" name="ltv-loan-amount" id="ltv-loan-amount" class="p000" /> 
     </div> 
     <div class="ltv-row"> 
      <label for="ltv-mortgage">Mortgage Value:</label> 
      <input type="text" name="ltv-mortgage" id="ltv-mortgage" class="p000" /> 
     </div> 
     <div class="ltv-row"> 
      <label for="ltv-property">Estimated Property Value:</label> 
      <input type="text" name="ltv-property" id="ltv-property" class="p000" /> 
     </div> 
    </div> 
    <div class="ltv-row"> 
     <p>Loan to Value % (LTV): <span id="ltv-result"></span></p> 
    </div> 
</div> 

更新

変更イベントが発火するように見えますが、テキストのみがボックスが値からヌルに変わります。

+0

あなたがエラーのコンソールをチェックしましたか? –

+1

私は次のポストはあなたを助けるだろうと思う: [http://stackoverflow.com/questions/208471/getting-jquery-to-recognise-change-in-ie][1] [1]:http://stackoverflow.com/questions/208471/getting-jquery-to-recognise-change-in-ie – pascalvgemert

+2

関連するHTMLを表示してください。ラジオボタンやチェックボックスを使用している場合は、おそらく '.change()'の代わりに '.click()'を待ちます。 – jfriend00

答えて

8

テキスト入力要素をターゲットにしているとは、あなたが使用してみましたが...それがうまくなります別のイベントですか?だからchangeの代わりに、例えば、keyup$("#ltv-dialog input").keyup(function() {。キーを押すたびに起動します。

+0

これは完璧に機能しました。私が達成しようとしていたものをさらに改善しました。 – unfrev

+0

ありがとう、素敵な解決策。 – Kyslik

3

jQueryを使用すると、.on()も問題を解決する場合があります。このようにそれを使用します。

jQuery("#ltv-dialog").on("change", "input", function(){ 
    alert("It works !"); 
    //your javascript/jQuery goes here 
    } 
); 

jsfiddle

0

ライブ機能を使用し、それは通常

$("#YOURTHING").live("change", function(){ 

// CODE HERE 

}); 
+1

.live(および.delegate)は、jQuery 1.7以降で非推奨です。セレクタにイベントをアタッチするには、.bindまたは.onを使用する必要があります。 .bindは、DOMに動的に追加される要素にイベントを添付しません。ただし、DOMに動的に要素が追加されていても.onがイベントを添付します。 –

0

正常に動作しているクリック、でもIEで初めてだけでなく、他のブラウザでは

$("#checkboxid").change(function() { 

}); 
初めて動作しない代わりに、 変更/ を使用してみてください

初めて初めて罰金を科す

$("#checkboxid").each(function() { 

}); 
0

は、私は同じ問題を持っていた:修正の下には私の仕事:

の代わりに:$("#ltv-dialog input").change(function() {

を私が使用:$('#ltv-dialog').on('input', function() {

関連する問題