-1

入力を監視して別のフィールドに複製する複数のライブ変更があります-名ではうまく機能しますが、その後の他のフィールドは何らかの理由で機能しません....誰かが何かアイデアを持っていますか?

$("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());
});​
4

3 に答える 3

3

現在のように、 same_billing_address_last_nameではなく、same_shipping_address_last_name にライブ リスナーを追加したいようです。

現時点では、入力が変更されるたびに入力の値を上書きしているだけです。first_name の例では、入力が変更されたときに別の入力の値を上書きしています。これはより理にかなっています。

ただし、おそらく 1 つのリスナーだけでこれらすべての入力に対処できます。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() { ... });

他の人が指摘したように、.onor .delegate(jQuery のバージョンに応じて) を使用し.liveます。

于 2012-09-06T13:34:53.407 に答える
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());
});
于 2012-09-06T13:35:49.750 に答える