如何使用包含id,name和javascript的jQuery克隆元素?

时间:2013-07-16 14:46:19

标签: javascript jquery clone velocity

我有一张表想要复制。此表包含带有id和name的输入。此表还包含javascript。

<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和名称从text_1更改为text_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...");
        });

我尝试更改此设置,但如果克隆的输入发生更改,则不会抛出事件。

你能帮助我吗?

谢谢。

3 个答案:

答案 0 :(得分:1)

请参阅Jquery方法.clone():

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

使用:

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

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

答案 1 :(得分:0)

好的但是我已经为我的输入创建了宏(速度宏),选择和其他字段和脚本集成在宏上以避免像这样调用外部宏的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 ...

答案 2 :(得分: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);"/>