2012-09-06 3 views
-1

입력을 모니터하고 다른 필드에 복제하는 라이브 변경이 두 개 있습니다. 어떤 이름으로는 작동하지만 다른 필드에서는 작동하지 않습니다. 아이디어?입력에 jquery 라이브 변경

$("input#same_shipping_address_first_name").live('change', function() { 
    $('input#same_billing_address_first_name').val($('input#same_shipping_address_first_name').val()); 
}); 
$("input#same_billing_address_last_name").live('change', function() { 
    $('input#same_billing_address_last_name').val($('input#same_shipping_address_last_name').val()); 
}); 
$("input#same_billing_address_address_line_1").live('change', function() { 
    $('input#same_billing_address_address_line_1').val($('input#same_shipping_address_address_line_1').val()); 
}); 
$("input#same_billing_address_address_line_2").live('change', function() { 
    $('input#same_billing_address_address_line_2').val($('input#same_shipping_address_address_line_2').val()); 
}); 
$("input#same_billing_address_address_line_3").live('change', function() { 
    $('input#same_billing_address_address_line_3').val($('input#same_shipping_address_address_line_3').val()); 
}); 
$("input#same_billing_address_town_city").live('change', function() { 
    $('input#same_billing_address_town_city').val($('input#same_shipping_address_town_city').val()); 
}); 
$("input#same_billing_address_county").live('change', function() { 
    $('input#same_billing_address_county').val($('input#same_shipping_address_county').val()); 
}); 
$("input#same_billing_address_postcode").live('change', function() { 
    $('input#same_billing_address_postcode').val($('input#same_shipping_address_postcode').val()); 
});​ 

답변

3

당신이 현재로, 오히려 청구를 _address_last_name를 same_보다 same_shipping_address_last_name하는 라이브 리스너를 추가 할 것입니다 것으로 보인다.

지금은 입력이 변경 될 때마다 입력 값을 덮어 쓰는 것입니다. 귀하의 first_name 예에서는 입력이 변경 될 때 또 다른 값을 덮어 쓰는 것이 더 적합합니다.

아마도 하나의 수신기로 모든 입력을 처리 할 수 ​​있습니다. 당신은 예를 들어 입력의 첫 번째 세트에 shipping 클래스를 추가하는 경우 :

$(".shipping").live('change', function() { 
    var billingId = $(this).attr('id').replace('_shipping_','_billing_'); 
    $('#' + billingId).val($(this).val()); 
}); 

당신은 물론뿐만 아니라 클래스없이 이런 일을 할 수있는 :

$('input[name^="same_shipping_address"]').live('change', function() { ... }); 

다른 사람들이 지적했듯이, .on 또는 .delegate (jQuery 버전에 따라 다름)을 .live 이상 사용하십시오.

+0

을 나는'this.id'는 $ (이)'대신에 일 것이라고 생각 .attr ('ID')'하지만 한 다음 수정 된 예제 내가 똑같은 해결책을 생각하고 있었으므로 – andyb

+0

감사는 대우를 받았다. 사용되는 낮은 버전의 라이브를 사용해야했다. –

0

첫 번째 선택기가 same_billing_x인데 이는 same_shipping_x이어야하기 때문에 연속적으로 작동하지 않습니다.

또한 live()의 사용을 피해야합니다. jQuery 1.7 이상을 사용하는 경우 on()을 사용해야합니다. 그렇지 않은 경우 delegate()을 사용해야합니다.

$("form").delegate('#same_shipping_address_first_name', 'change', function(){ 
    $('#same_billing_address_first_name').val($(this).val()); 
}); 
0

사용해보십시오 :

$("input#same_shipping_address_first_name").on('change', function(){ 
.....