簡體   English   中英

JS適用於FF,但不適用於IE

[英]JS works in FF but not in IE

我是JS新手。 我已經完成了2個簡單的函數來更改輸入按鈕的值和onclick-event。

function doAjaxRequest(url, divID, buttonID) {
  $(divID).html('<img src="images/loader.gif" />');
  setTimeout(function(){ $(divID).load(url); }, 600);
  setTimeout(function(){ $(buttonID).attr({
      value: 'Schliessen',
      onClick: 'clear_div(\''+url+'\', '+divID.id+', '+buttonID.id+')'
    });}, 600);
};

function clear_div(url, divID, buttonID) {
    $(divID).empty();
    $(buttonID).attr({
      value: 'Mehr...',
      onClick: 'doAjaxRequest(\''+url+'\', '+divID.id+', '+buttonID.id+')'
    });
};

函數調用是

<div id="div1"></div>
<input type="button" id="button1" onClick="doAjaxRequest('test.html', div1, button1);" value="More..."/>

我用於首頁的文檔類型是

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

這些功能都可以在IE中正常工作,但在FF中,只有當我將doctype設置為時,它們才能工作

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">

我也嘗試了“ loose.dtd”,但沒有任何效果。

JS我在做什么錯? 希望可以有人幫幫我。

喬喬

問題可能在於onClick應該是onclick (在XHTML中,屬性是重要的)。 但是有兩個問題。

  1. 在您的標記中:

     <input type="button" id="button1" onClick="doAjaxRequest('test.html', div1, button1);" value="More..."/> 

    您沒有在div1button1周圍加上引號,這意味着您依賴瀏覽器將這些符號轉儲到全局名稱空間中,因為它們是元素的ID。 這是相當普遍的(IE和其他一些工具也可以做到),但不是普遍的。 相反,我會傳遞字符串,然后正確地查找它們。

  2. 由於您使用的是jQuery,因此沒有理由(也有一些理由不使用) onclick屬性。

    所以:

     function doAjaxRequest(url, divID, buttonID) { $('#' + divID).html('<img src="images/loader.gif" />'); setTimeout(function(){ $('#' + divID).load(url); }, 600); setTimeout(function(){ $('#' + buttonID) .attr({value: 'Schliessen'}) .click(function() { clear_div(url, divID, buttonID); }); }, 600); } function clear_div(url, divID, buttonID) { $('#' + divID).empty(); $('#' + buttonID) .attr({value: 'Mehr...'}) .unbind('click') .click(function() { doAjaxRequest(url, divID, buttonID); }); } 

    同樣,您的按鈕連接本來應該是:

     $("#button1").click(function() { doAjaxRequest('test.html', 'div1', 'button1'); }); 

    ...而不是在HTML中使用onclick 該代碼需要顯示 HTML中的按鈕之后 (通常建議將script標簽放在文檔底部 ,緊接在</body>標簽之前),或者可以將其包裝在jQuery ready處理程序中:

     jQuery(function($) { $("#button1").click(function() { doAjaxRequest('test.html', 'div1', 'button1'); }); }); 

    ...因此它僅在DOM已加載時運行。

筆記:

  • 現在,我們將真實函數用於事件處理程序,並以現代方式將其連接起來。
  • 我們使用的是元素的ID,而不是元素的全局實例(並不完全可靠)。
  • 在添加新的click處理程序之前,我們將使用unbind刪除所有以前的click處理程序。
  • 在函數聲明之后不需要分號。 分號終止語句。 函數聲明不是語句(它們是聲明)。 就是說,在其中放置分號是無害的。 :-)

最后:我認為我可能只是讓點擊處理程序根據某個標志更改其行為,而不是刪除舊的click處理程序並放入新的點擊處理程序。

我不確定這是否是導致您出現問題的原因,但是您對doAjaxRequest的參數對我來說很有趣,其方式如下:我不確定所有瀏覽器都將某個元素公開為以該元素的ID命名的全局變量。 如果這樣做,我會更確定您的代碼是正確的:

onClick="doAjaxRequest('test.html', '#div1', '#button1');"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM