2013-07-16 42 views
2

我有一張表,我想要複製。此表包含帶有ID和名稱的輸入。此表還包含JavaScript。如何使用包含id,name和javascript的jQuery來克隆元素?

<table> 
<tr> 
    <td> 
     <input type="text" id="text_1" name="text_1"/> 
     <script> 
      jQuery("#text_1").on("change", function() { 
       alert("do..."); 
      }); 
     </script> 
    </td> 
</tr> 
</table> 

我可以很容易地更改ID名稱從文本1到文本2這樣的:

jQuery(clone).find("*").each(function(index, element) { 

if(element.id) 
{ 
    var matches = element.id.match(/(.+)_\d+/); 

    if(matches && matches.length >= 2) { 

     element.id = matches[1] + "_" + demandeNumber; 
    } 
} 

if(element.name) 
{ 
    var matches = element.name.match(/(.+)_\d+/); 

    if(matches && matches.length >= 2) { 

     element.name = matches[1] + "_" + demandeNumber; 
     element.value = ""; 
    } 
} 
}); 

但我怎麼能更改JavaScript的ID從這個:

jQuery("#text_1").on("change", function() { 
      alert("do..."); 
     }); 

jQuery("#text_2").on("change", function() { 
      alert("do..."); 
     }); 

我試圖改變th但是如果克隆的輸入發生變化,事件不會丟失。

你能幫我嗎?

謝謝。

+4

您可以使用事件委託呢? '$(document).on('change','input.someClass',function(e){});'?你有這樣的方式似乎很混亂。 –

回答

1

見Jquery的方法.clone():我輸入

//That true param indicates that event handlers should also be cloned 
var cloneElement = $("yourElement").clone(true); 

http://jsfiddle.net/sLBgY/5/

+0

感謝您的快速回復,但我知道這種方法。 我只是無法克隆JavaScript ... –

+0

因此,然後編寫您的JavaScript,以便它不是特定於該元素,並通過它'這個'。 ()「(change」,function(){ alert(「do ...」); });' 然後使用.clone()方法。 – Toiletduck

+1

關於此主題的信息:http://stackoverflow.com/questions/7534476/how-to-clone-script-tags-with-jquery#7534557該腳本被克隆,但不執行:http://jsfiddle.net/sLBgY/7 /示例如何[可以委託事件](http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-javascript-event-delegation-in-4-minutes/)將目標元素:http://jsfiddle.net/sLBgY/8/ – Stano

0

好了,但我已經創建的宏(速度宏):

http://api.jquery.com/clone/

對於使用,選擇和其他字段和腳本都在宏上進行了整合,以避免像這樣調用外部的javascript這樣的

#macro(textField $hasTr $hasTd $hasLabel $hasError $label $attr $size $maxLength $helpText $isReadonly $isMandatory $autofocus $beanValue $bean) 
#if($hasTr) <tr> #end 
    #if($hasTr || $hasTd) <td class="label"> #end 
     #if($hasLabel) 
      #if(!$isReadonly) <label for="$attr"> #end #text("$label") #if(!$isReadonly) </label> #end #if($isMandatory) <span class="mandatory">*</span> #end 
     #end 
    #if($hasTr || $hasTd) </td> #end 
    #if($hasTr || $hasTd) <td class="value"> #end 
     #if($isReadonly) 
      <input type="hidden" id="$attr" name="$attr" value="$!escUtils.escapeHtml($!beanValue)" /> 
      <span class="readonly">$!beanValue</span> 
     #else 
      <input type="text" maxlength="$maxLength" id="$attr" name="$attr" value="$!escUtils.escapeHtml($!beanValue)" size="$size" #if($autofocus) autofocus="autofocus" #end /> 
     #end 

     #if($helpText != "") 
      <img src="#media("picto/16x16/help.png")" id="${attr}_image" alt="" /> 
      <script> 
       #set($imageId = "${attr}_image") 
       jQuery("#$imageId").qtip({ 
        prerender: true, 
        content : { text : "$!helpText" }, 
        show: { delay: 1 }, 
        effect: false, 
        position: { my: 'top left', target: 'mouse', viewport: jQuery(window), adjust: { x: 10, y: -15 } }, 
        style: { classes: 'qtip-lgcf qtip-rounded' } 
       }); 
      </script> 
     #end 
    #if($hasTr || $hasTd) </td> #end 
    #if($hasTr || $hasTd) <td class="error"> #end 
     #if($hasError) #if($bean.errors.containsKey("$attr")) #set($errorValue = $!bean.errors.get("$attr")) <span>#text("$errorValue")</span> #end #end 
    #if($hasTr || $hasTd) </td> #end 
#if($hasTr) </tr> #end 

結束

我應該能夠在腳本來更新ID爲每個字段並重新加載的JavaScript ...

+0

你好弗蘭克,我不知道什麼是[速度](http://stackoverflow.com/tags/velocity/info),但你可以嘗試添加這個信息與你的問題一起速度標籤。 (或者也許問一個新問題?我不知道。) – Stano

+0

速度是這樣的:http://velocity.apache.org/ –

0

有兩種方法可以做到這一點。 1.使用正則表達式並用新ID替換舊ID。 2.取的JavaScript塊出來,創建這樣的功能:

<script> 
    onTextChange = function(obj) 
    { 
    alert("do...."); 
    } 
    </script> 

,並使用文本框的更改事件調用此函數

<input type="text" id="text_1" name="text_1" onChange="onTextChange(this);"/>