2

我有一张要复制的表。此表包含带有 id 和名称的输入。该表还包含 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 和 name 从 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...");
        });

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

你能帮助我吗?

谢谢你。

4

3 回答 3

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/

于 2013-07-16T14:53:20.363 回答
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 ...

于 2013-07-17T07:18:13.143 回答
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);"/>
于 2013-07-22T11:44:47.537 回答