2011-12-19 60 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