我在使用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>';
似乎在资源管理器中,我只会在选中复选框时收到警报。 (问题是因为如果必须检查数据库,它首先会读取数据库,因此您可以稍后更改它)。
有人知道我哪里出错吗?
非常感谢您的回答。
答案 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属性。
我希望这会奏效。