Ajax Call Checkbox Internet Explorer - PullRequest
       0

Ajax Call Checkbox Internet Explorer

1 голос
/ 19 декабря 2011

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

Итак, у меня есть форма с флажком.Когда кто-то нажимает на флажок, вызывается мой ajaex, и ввод данных изменяется в БДВ 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>'; 

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

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

Заранее большое спасибо за ответы.

Ответы [ 2 ]

0 голосов
/ 19 декабря 2011

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

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

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

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

и получите проверенный атрибут внутри функции.

Надеюсь, это сработает.

0 голосов
/ 19 декабря 2011

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

edit FIXED (зарегистрирован в change вместоclick)
edit Завернуто в $(document).ready()
edit Также добавлено событие 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>

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...