0

我有两张桌子。我想将值从一个表镜像到另一个表。我目前的实现是这样的:

   <script type="text/javascript">  
        $("#textfield1, #textfield2, #textfield3, #select1").on("keyup keypress blur click change", function(event){        
            $("input[type='text']#copytextfield1").val( $("[type='text']#textfield1").val() );
            $("input[type='text']#copytextfield2").val( $("[type='text']#textfield2").val() );
            $("input[type='text']#copytextfield3").val( $("[type='text']#textfield3").val() );
            $("input[type='text']#copytextfield4").val( $("select#select1").val() );        
        });         
    </script>

如您所见,名称非常相似。唯一的区别是镜像元素具有“副本”。你能提出一些提高效率的方法吗?也许利用命名约定?

4

2 回答 2

2

可以这样做:

   <script type="text/javascript">  
        $("#textfield1, #textfield2, #textfield3, #select1").on("keyup keypress blur click change", function(event){
            for (var i = 1; i <= 3; i++) {
                $("#copytextfield" + i).val( $("#textfield" + i).val() );
            }
            $("input[type='text']#copytextfield4").val( $("select#select1").val() );        
        });         
    </script>

虽然选择的 ID 会引起一些麻烦,所以如果您将所有字段的 id 更改为 input1 - input4 之类的东西,它可能会被重构得更多。

    <script type="text/javascript"> 
        $("#input1, #input2, #input3, #input1").on("keyup keypress blur click change", function(event){
            for (var i = 1; i <= 4; i++) {
                $("#copytextfield" + i).val( $("#input" + i).val() );
            }       
        });         
    </script>
于 2012-06-30T12:17:05.553 回答
0

请试试这个:也为你做了一个演示:http: //jsfiddle.net/6hwLS/4/

想法是从末尾取出数值并将它们与$(this)对象一起使用:

此外,您不需要input[type='text']或唯一selectid并唯一标识 DOM 元素。

希望这可以帮助,:)

像这样:

$("#textfield1, #textfield2, #textfield3, #select1")
    .on("keyup keypress blur click change", function(event) {

        var theNum = parseInt($(this).attr("id").match(/\d+$/)); // will return last numeric value

         $("#copytextfield"+theNum).val($("#textfield"+theNum).val());      
         if( theNum === 4) {
            $("#copytextfield"+theNum).val($("#select1").val());
        }
}); ​
于 2012-06-30T12:17:15.087 回答