2012-03-29 3 views
6

У меня есть диалог, который выполняет вычисления, зависящие от трех полей ввода. Когда кто-либо из них изменен, он проверяет, все ли они заполнены, и если они обрабатываются и выдают ответ.Событие 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.Если вы используете переключатели или флажки, то вы, вероятно, захотите прослушать '.click()' вместо '.change()'. – 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, где .on присоединяет события, даже если элементы добавляются динамически к DOM. –

0

Пожалуйста, попробуйте с помощью каждого вместо изменений/нажмите, который работает хорошо, даже в первый раз в IE, а также другие браузеры

не работает в первый раз

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

}); 

Рабочие штрафы даже в первый раз

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

}); 
0

Я была такая же проблема: Ниже фиксируем работал для меня:

Вместо: $("#ltv-dialog input").change(function() {

Я использовал: $('#ltv-dialog').on('input', function() {

Смежные вопросы