2011-12-19 3 views
1

У меня проблема с Internet Explorer и ajax. Итак, сначала я использовал только php, и все, работало, но поскольку я не хочу перезагружать страницу, я использую ajax.ajax call checkbox internet explorer

У меня есть форму с пометкой. Когда кто-то нажимает на этот флажок, вызывается мой ajaex и ввод изменяется в db. В firefox нет проблем, но он не работает в Internet Explorer.

Вот часть моего кода:

<script language="javascript" type="text/javascript"> 
function changefield($doss, $display){ 
    $.get("update.php",{dossier: $doss, CSQ_DISPLAY:$display}); 
    alert("test"); 
} 
</script> 


echo '<form id="'.$r ['BC_DOSSIER'].'" method="get" action=""> 
<input type="checkbox" name="CSQ_DISPLAY" '.$checked .' onchange="changefield(\''.$r ['BC_DOSSIER'].'\',this.checked)"> 
</form>'; 

кажется, что в проводнике, я только получить уведомление, когда этот флажок был установлен. (Проблема в том, что он сначала читает db, если он должен быть проверен или нет, поэтому вы можете изменить его позже).

Кто-нибудь знает, где я ошибся?

Благодарим вас за ответы.

+0

Атрибуты on * на самом деле не используются так много, потому что это означает смешивание javascript и HTML, что-то, что библиотеки, подобные jQuery, были созданы, чтобы избежать в первую очередь.Вам лучше дать флажок идентификатор (или класс, если вам нужен тот же код для работы с несколькими флажками на одной странице) и привязать обработчик события click с помощью jQuery, тем более, что вы уже используете jQuery в любом случае – GordonM

ответ

0

Я бы предпочел, чтобы определить это, как это, я ненавижу, используя onclick в моем HTML:

редактироватьFIXED (зарегистрирован в change вместо click)
редактировать завернутые в $(document).ready()
править Внесено событие click

<?php 
    echo '<input class="ajax_check" id="check_'.htmlspecialchars($r['BC_DOSSIER']).'" type="checkbox" name="CSQ_DISPLAY" '.$checked .' />'; 
?> 
<script type="text/javascript"> 
    $(document).ready(function() { 
    $('input.ajax_check').click(function() { 
     this.blur(); 
    }); 
    $('input.ajax_check').change(function() { 
     var dossierId = this.id.slice(6); 
     var isChecked = (this.checked) ? 1 : 0; // better to explicitly convert bool to int for HTTP requests 
     $.get('update.php',{ 
     dossier: dossierId, 
     CSQ_DISPLAY: isChecked 
     }); 
     alert('test'); 
    }); 
    }); 
</script> 

Это будет регистрировать этот обработчик ко всем входам с классом «ajax_check», не оставляя функцию, загромождающую объект окна, и не испортить ваш HTML. Попробуйте и выясните, устраняет ли проблема проблему - может быть, это не так, как в принципе, одно и то же, но это лучший способ сделать это IMHO. Если у вас все еще есть проблема, вернитесь ко мне, и мы ее отладим.

Обратите внимание, что с помощью этого подхода, важно, что <script> выполняется после в DOM готова, поэтому она должна быть либо определена в теле после того, как флажок или (лучше), завернутые в $(window).load() или (лучше) $(document).ready() ,

+0

Привет, спасибо за ответ, но с вашим ответом, он также больше не будет работать в firefox. – user993177

+0

У вас есть ошибки? И правильно ли вы задали атрибуты 'id' и' class' '' ''? – DaveRandom

+0

Привет, я не получаю сообщений об ошибках. В проводнике он просто не будет входить в функцию. – user993177

0

В вашем резервном значении кода функция не передается для IE.

<input type="checkbox" name="CSQ_DISPLAY" '.$checked .' onchange="changefield(\''.$r ['BC_DOSSIER'].'\',this.checked)"> 

т.е.) в коде выше OnChange = "changefield (\ ''. $ Г [ 'BC_DOSSIER']. '\', This.checked)" this.checked не будет работать для IE, так что вы можете передать это значение и получить значение в четырех функциях, это будет работать для всех браузеров. например,

<input type="checkbox" name="CSQ_DISPLAY" '.$checked .' onchange="changefield(\''.$r ['BC_DOSSIER'].'\',this)"> 

и получить атрибут checked внутри функции.

Я надеюсь, что это сработает.

+0

С вашим ответом моя проблема по-прежнему остается прежней. Все работает в firefox, но не в проводнике. Я использовал это в моей функции ajax: $ display = $ display.checked. но, похоже, он не пойдёт в мою функцию. – user993177

+0

@ user993177 Можете ли вы поместить предупреждение для отображения $ после вашего кода $ display = $ display.checked, если вы получите неопределенный, можете ли вы попробовать с $ display = $ display.getAttribute ('checked'); –