2012-03-29 48 views
6

Tôi có một hộp thoại thực hiện phép tính phụ thuộc vào ba trường nhập. Khi bất kỳ trong số chúng được thay đổi, nó sẽ kiểm tra xem chúng có được lấp đầy không và nếu chúng là quá trình và đưa ra phản ứng của nó.Sự kiện jQuery .change() không kích hoạt trong IE

Nó hoạt động hoàn toàn tốt trong FF, Chrome, Opera, vv, nhưng trong mọi phiên bản của IE, nó chỉ dừng hoạt động. Phần còn lại của jQuery của tôi hoạt động tốt, nhưng tôi không thể tìm ra chính xác vị trí của vấn đề ở đây. Tôi nghĩ rằng nó có thể là để làm với sự kiện .change() hoặc sự kiện nhiều ràng buộc nhưng tôi thực sự không biết.

Dưới đây là mã vi phạm:

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

và HTML trong câu hỏi:

<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> 

Báo cáo cập nhật kiện

Sự thay đổi dường như được bắn, nhưng chỉ khi văn bản thay đổi hộp từ một giá trị thành null.

+0

Bạn đã kiểm tra giao diện điều khiển cho các lỗi? –

+1

Tôi nghĩ rằng bài viết sau đây sẽ giúp bạn ra ngoài: [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

Vui lòng hiển thị HTML có liên quan.Nếu bạn đang sử dụng nút radio hoặc hộp kiểm, thì có thể bạn muốn nghe '.click()' thay vì '.change()'. – jfriend00

Trả lời

8

Khi bạn đang nhắm mục tiêu các yếu tố đầu vào văn bản, bạn đã thử sử dụng một sự kiện khác nhau? Vì vậy, thay vì sử dụng change, ví dụ: keyup? $("#ltv-dialog input").keyup(function() {. Điều này sẽ kích hoạt sau mỗi lần nhấn phím.

+0

Điều này làm việc hoàn hảo - thậm chí cải thiện về những gì tôi đã cố gắng để đạt được. – unfrev

+0

Cảm ơn, giải pháp tốt đẹp. – Kyslik

3

Sử dụng jQuery .on() cũng có thể giải quyết được sự cố của bạn. Sử dụng nó như thế này:

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

jsfiddle

0

Sử dụng chức năng sống, nó thường làm cho nó hoạt động ...

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

// CODE HERE 

}); 
+1

.live (và .delegate) không được dùng nữa kể từ jQuery 1.7. Chúng ta nên sử dụng .bind hoặc .on để đính kèm một sự kiện vào bộ chọn. . Liên kết sẽ không đính kèm sự kiện vào các phần tử đang được nối động vào DOM nơi .on sẽ đính kèm các sự kiện ngay cả khi các phần tử đang được nối động với DOM. –

0

Vui lòng thử với việc sử dụng mỗi thay vì thay đổi/nhấp chuột, mà đang làm việc tốt thời gian thậm chí đầu tiên trong IE cũng như các trình duyệt khác

không làm việc một thời gian đầu tiên

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

}); 

Làm việc tốt ngay cả lần đầu tiên

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

}); 
0

tôi đã cùng một vấn đề: Dưới năng khắc phục làm việc cho tôi:

Thay vì: $("#ltv-dialog input").change(function() {

tôi đã sử dụng: $('#ltv-dialog').on('input', function() {

Các vấn đề liên quan