ajax调用复选框Internet Explorer

时间:2011-12-19 12:00:58

标签: php ajax forms internet-explorer

我在使用Internet Explorer和ajax时遇到这个小问题。 所以首先我只使用php,一切都工作,但因为我不想重新加载页面,我使用ajax。

所以我有一个带复选框的表单。当有人点击复选框时,我的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>'; 

似乎在资源管理器中,我只会在选中复选框时收到警报。 (问题是因为如果必须检查数据库,它首先会读取数据库,因此您可以稍后更改它)。

有人知道我哪里出错吗?

非常感谢您的回答。

2 个答案:

答案 0 :(得分:0)

我更喜欢这样定义,我讨厌在我的HTML中使用onclick

编辑 已修复(已注册到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>

这将使用className'ajax_check'将该处理程序注册到所有输入,而不会使函数混乱窗口对象,并且不会弄乱HTML。尝试一下,看看它是否解决了问题 - 它可能没有,因为它基本上是相同的事情,但它是一个更好的方式来做它恕我直言。如果您仍有问题,请回复我们,我们将对其进行调试。

请注意,使用此方法,重要的是在 DOM准备就绪后执行 {em>},因此应该在复选框后的正文中定义它,或者(更好)包含在<script>或(最佳)$(window).load()内。

答案 1 :(得分:0)

在你的代码回退函数值不会传递给IE。

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

ie)在上面的代码中onchange =“changefield(\''。$ r ['BC_DOSSIER']。'\',this.checked)”this.checked不适用于IE,所以你可以传递这个和获得四个函数的值,这将适用于所有浏览器。例如)像这样

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

并获取函数内的checked属性。

我希望这会奏效。