2010-07-05 108 views
2

我在使用某些javascript時遇到了一些麻煩。我使用jQuery來動態地將行 添加到表中。此外,JavaScript是從一些PHP和Kohana代碼生成的。將HTML存儲到javascript變量中

這是腳本。

<script type="text/javascript"> 
    function delExtensionNumber(element){ 
     $(element).prev().attr('value', 'X'); 
     $(element).parent().parent().hide(); 
    } 

    function addExtensionNumber(){ 
     lines = <?php echo form::dropdown($ext_id."[did]", $lines, ''); ?>; 
     extensions = <?php echo form::dropdown($ext_id."[extension]", $phones, ''); ?>; 

     $('#line-extensions > tbody:last').append('<tr><td>'+lines+'</td><td>'+extensions+'</td><td><input type="hidden" name="'+<?php echo $ext_id;?>+'[state]" value="0" /><a class="hide" onclick="delExtensionNumber(this)"></a></td></tr>'); 

     <?php $ext_id++; ?> 
    } 
</script> 

這在Firefox中正常工作。但在IE和Chrome中,它不起作用。 Google Chrome沒有任何反應。在IE中,我在頁面上出現錯誤。該錯誤是一個語法錯誤。它不喜歡字線後面的<字符。

好吧,所以我想我最好在這個字符串周圍加上一些引號。但是......當我這樣做時,沒有任何工作。

+0

你可以顯示什麼是在Firefox版本輸出? – Duniyadnd 2010-07-05 01:00:47

回答

5

我只是假設form::dropdown被吐出純HTML。在Firefox中,這被解釋爲E4X,然後在連接時轉回字符串。 IE和Chrome不支持E4X。爲了使它的工作,你可以做這樣的事情:

lines = <?php echo json_encode(form::dropdown(...)); ?>; 

編輯:,當你把它周圍的引號不工作的原因是因爲HTML包含引號。上面的代碼將正確地轉義引號。

+0

你是對的,'form :: dropdown()'返回一串HTML。 – alex 2010-07-05 01:11:09

+0

Frantastic。不是我會想到的,但效果很好!非常感謝。 – Matt 2010-07-05 01:23:14

+0

其實我對引號非常小心,但我仍然無法使它工作。所以json編碼版本完成了這項工作。 – Matt 2010-07-05 01:25:09

2

Chrome不支持XML文字語法,您不能編寫例如line = <div>foo</div>,你必須將數據放入一個字符串中。

lines = '<?php echo form::dropdown($ext_id."[did]", $lines, ""); ?>;' 

可以工作(你應該也可能逃脫'

+0

這就是我認爲可能的工作,但實際上它根本不起作用。 – Matt 2010-07-05 01:22:47

-2

強烈建議您使用jQuery DOM創建插件

這將是很多,更容易。

+2

我不明白爲什麼。 HTML由Kohana生成,所以我不明白爲什麼有必要模仿該功能的客戶端。據我所知,它可能依賴於數據庫中的某些東西,並且不可能實現客戶端。 – icktoofay 2010-07-05 01:18:46

+0

我誤解了你的問題。 – GerManson 2010-07-05 01:40:25