2011-12-19 59 views
1

我遇到了Internet Explorer和ajax这个小问题。 因此,我首先使用的只是php,而且所有的工作,但因为我不想重新加载页面,我使用ajax。ajax呼叫复选框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>'; 

看来,在资源管理器中,我只得到警报后在复选框进行了调查。 (问题是因为它首先读取数据库,如果它必须被检查或没有,所以你可以稍后改变它)。

有人知道我出错的地方吗?

非常感谢您提前答复。

+0

on *属性不再那么用了,因为它意味着将JavaScript和HTML混合在一起,而像jQuery这样的库就是为避免摆在首位而创建的。你最好给复选框添加一个ID(或者类,如果你需要相同的代码来处理同一页面上的多个复选框),并将click事件处理程序与jQuery连接起来,尤其是你已经使用jQuery – GordonM 2011-12-19 12:19:26

回答

0

我更愿意把它定义这样的,我讨厌我的HTML使用onclick

编辑固定(注册于clickchange代替)在$(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。尝试一下,看看它是否解决了这个问题 - 它可能不是因为它基本上是一样的事情,但它是一个更好的方式来做它恕我直言。如果你仍然有问题,回到我身边,我们会调试它。

注意,使用这种方法,那就是<script>之后的DOM执行重要的是准备好了,所以它应该要么在身体包裹在里面$(window).load()或(最好)$(document).ready()复选框或(更好)之后定义。

+0

嗨,感谢您的答案,但与您的答案,它也不会在Firefox中工作了。 – user993177 2011-12-19 12:49:16

+0

你有什么错误吗?你有没有正确设置''的'id'和'class'属性? – DaveRandom 2011-12-19 12:55:25

+0

嗨,我没有收到任何错误消息。在资源管理器中,它不会进入该功能。 – user993177 2011-12-19 13:02:00

0

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

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

即)在上面的代码中的onchange = “变化区域(\ ''。$ R [ '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 2011-12-19 12:48:40

+0

@ user993177你可以在你的代码$ display = $ display.checked之后放置$ display的alert,如果你没有定义,你可以试试$ display = $ display.getAttribute('checked'); – 2011-12-19 13:09:05