2010-02-04 77 views
0

建議其他,傾倒IE6是...我無法控制:)IE6不改變屬性(id和名稱)與jQuery attr調用 - 任何建議?

我想要做的快速簡介:我有一個選擇元素的窗體。當用戶在select中選擇一個特定選項(下面代碼中的id type2)時,我會顯示一個包含新選擇的div結構。我想要新的div結構和它的孩子成爲現有的一個克隆(id pdProgramDiv1),因爲我使用php來填充div中的select。一旦選擇被克隆,我需要更改克隆的ID和div的名稱及其子標籤,並選擇,因爲表單信息正在傳遞給我的提交php腳本。如果它們沒有唯一的ID,那麼雖然它們被序列化爲查詢字符串,但php中的$ _POST數組只包含給定ID的最後一個值。

我已經包含了在Firefox 嘆息絕對完美的代碼,並且無法更改IE6中的ID和名稱。這個代碼可能不如一些簡潔;我對jQuery仍然很陌生。

$('#type2').change(function() { 
    if ($('#type2 option:selected').text() == 'Program Director') { 
     $('#pdProgramDiv1').clone().attr({id: 'pdProgramDiv2', name: 'pdProgramDiv2'}).appendTo($('#type2Div')); 

     $('#pdProgramDiv2 > #pdProgram1').attr({id: 'pdProgram2', name: 'pdProgram2'}); 

     $('#pdProgramDiv2 > label').attr('for', 'pdProgram2'); 
    } else { 
     $('#pdProgramDiv2').hide(); 
    } 
}); 

我環顧四周,並使用變量,而不是鏈接,並呼籲個人到屬性,而不是使用對象文本(或地圖)嘗試過,但沒有什麼幫助。所有的變化在FF中運行良好,但在IE6中沒有任何喜悅。

這是一個已知的問題,或者任何人都可以告訴我如何讓更改發生?

如果我不能得到這個工作,我想我將不得不創建所有的元素並隱藏它們,但那看起來不太好。

在此先感謝!

UPDATE:解決

非常感謝中所發現的我的方法錯誤的人。我想發佈最終解決問題的代碼。正如我在下面對我接受的答案的評論中所說的那樣,該修復非常有意義。有點尷尬,我沒有看到它,但有時需要一雙新鮮的眼睛!唯一的變化是選擇子選擇而不是選擇ID,並刪除div上的名稱attr賦值,因爲如前所述,它什麼都不做。

$('#type2').change(function() { 
    if ($('#type2 option:selected').text() == 'Program Director') { 
     $('#pdProgramDiv1').clone() 
      .attr('id', 'pdProgramDiv2') 
      .appendTo($('#type2Div')); 

     $('#pdProgramDiv2 > select').attr({ 
      id: 'pdProgram2', 
      name: 'pdProgram2'}); 

     $('#pdProgramDiv2 > label').attr('for', 'pdProgram2'); 
    } else { 
     $('#pdProgramDiv2').hide(); 
    } 
}); 
+0

這看起來像在IE中的錯誤。 – SLaks 2010-02-04 19:08:45

+2

等待你在說什麼?!? IE6中的BUG? – Pointy 2010-02-04 19:10:11

+0

感謝您修復我的代碼格式。我仍然在那裏失去一些東西。 – 2010-02-04 19:52:33

回答

4

我覺得你的問題是在這裏...

$('#type2').change(function() { 
    /* snip */ 
     $('#pdProgramDiv1').clone().attr({id: 'pdProgramDiv2', name: 'pdProgramDiv2'}).appendTo($('#type2Div')); 

     $('#pdProgramDiv2 > #pdProgram1').attr({id: 'pdProgram2', name: 'pdProgram2'}); 
    /* snip */ 
}); 

你克隆的容器,切換它的ID,並將其插入回頁面。容器很好,但是頁面現在包含兩個元素ID'd#pdProgram1。 document.getElementById不會那樣。

重構代碼以通過其標記而不是其ID來搜索select元素。

+0

我有點困惑。我認爲在克隆調用之後但在appendTo之前調用.attr會在影響Dom之前更改ID和名稱。當我在我看到的螢火蟲中進行調試時。生成的HTML具有我所期望的所有唯一ID。你是否建議我通過標籤選擇因爲IE? – 2010-02-04 20:15:52

+0

它更改了div的ID和名稱,是的。 (但是,呃,div沒有名字,所以什麼都不會做)。它不會改變div內的'