2011-09-23 52 views
0

我有以下代碼(簡化看到背後的邏輯):如何克隆<script>標籤使用jQuery

<div id="alfa">Text 
    <script> 
     $("#alfa").click(function() { 
      alert($(this).attr("id")); 
     }); 
    </script> 
</div> 
<script> 
    var clone = $("#alfa").clone().attr("id",$("#alfa").attr("id")+"_1"); 
    $("#alfa").after(clone); 
</script> 

我需要看到「alfa_1」當我在克隆的文字點擊,但沒有任何反應。

當我使用克隆(真,真)的作品,但我沒有看到在Firebug克隆的div的代碼,看看真的發生了什麼。

另外,我不知道爲什麼點擊原始div警報觸發兩次。

謝謝。

+1

我不確定我是否理解。你想用這個做什麼?定義一個函數並且調用兩次會不會更容易? –

+0

您可以爲所有項目添加一個類(.alfas),然後使用$('。alfas')。live()而不是.click。那麼你不必擔心克隆事件。 – BNL

+2

在每個瀏覽器中,您都可以並且應該使用'this.id'而不是'$(this).attr('id')'。總是。 –

回答

7

當我單擊克隆的文本時,需要看到「alfa_1」,但沒有任何反應。

<script>元素上執行DOM或innerHTML操作在瀏覽器中不一致,並且在JavaScript執行週期方面沒有任何意義。避免在所有情況下。

如果你想DOM元素與他們的jQuery的事件處理程序一起復制,使用clone(true)

<div id="alfa">Text</div> 

<script type="text/javascript"> 
    $('#alfa').click(function() { 
     alert(this.id); 
    }); 
    var clone= $('#alfa').clone(true); 
    clone[0].id+= '_1'; // sorry, I couldn't bring myself to do this the jQuery way 
    $('#alfa').after(clone); 
</script> 
+2

所以+1 *「我不能讓自己做這個jQuery的方式」* – vzwick

1

原始DIV警報被觸發兩次,因爲腳本是div裏面定義。將腳本移出div,它應該按預期工作:

<div id="alfa">Text</div> 
<script> 
    $("#alfa").click(function() { 
     alert($(this).attr("id")); 
    }); 
</script>