0

このコードは、APIからフォームに入力します。

$('#shipper_search').click(function(){

    var searchBy = $('#shipper_search_by').val();
    var searchFor = $('#shipper_search_for').val();
    var warehouse = $('#warehouse').val();

    $.get('index.php?p=api&r=json&c=location&m=find&d=' + searchBy + '/' + searchFor + '/shipper/' + warehouse  , function(data, status){

        data = $.parseJSON(data);

        $('#shipper_name').val(data['body'][0]['location_name']);
        $('#shipper_address1').val(data['body'][0]['address1']);
        $('#shipper_address2').val(data['body'][0]['address2']);
        $('#shipper_city').val(data['body'][0]['city']);
        $('#shipper_state').val(data['body'][0]['state']);
        $('#shipper_zip').val(data['body'][0]['zip']);
        $('#shipper_country').val(data['body'][0]['country']);

        $('#shipper_contact_name').val(data['body'][0]['contact_name']);
        $('#shipper_contact_phone').val(data['body'][0]['phone']);
        $('#shipper_contact_fax').val(data['body'][0]['fax']);
        $('#shipper_contact_email').val(data['body'][0]['email']);

    });

});

そのセクションでフィールドが変更されるたびに、次のコードが実行されることになっています。

$('#shipperinfo').find('input:text').change(function(){

    var valid = 0;

    if($('#shipper_name').val().length > 0){
        valid++;
    }

    if($('#shipper_address1').val().length > 0){
        valid++;
    }

    if($('#shipper_city').val().length > 0){
        valid++;
    }

    if($('#shipper_state').val().length > 0){
        valid++;
    }

    if($('#shipper_zip').val().length > 0){
        valid++;
    }

    if($('#shipper_country').val().length > 0){
        valid++;
    }

    if(valid == 6) {

        $('#shipper_ok').removeClass('hide');

    } else {

        $('#shipper_ok').addClass('hide');

    }

});

ユーザーがフィールドに情報を手動で入力すると、2番目の機能が完全に機能します。ただし、検索機能を使用してフォームに入力する場合、.change()は発生しないようです。

私はその理由について年齢を探していましたが、jQuery / JSは比較的新しい(約4日)ので、これを解決する方法がわかりません。任意の提案やアイデアをいただければ幸いです。

4

2 に答える 2

3

JavaScriptがフィールドを更新するときにchange()はトリガーされません。

最も簡単な解決策は、要素の1つに変更メソッドをトリガーさせることです

$('#shipper_contact_email').val(data['body'][0]['email']).trigger("change");

また

$('#shipper_contact_email').val(data['body'][0]['email']).change();
于 2013-02-06T16:35:46.750 に答える
0

値を動的に変更した場合、変更は機能しません。手動で変更する必要があります。

私はこのようにします。

$('#shipper_search').click(function(){

var searchBy = $('#shipper_search_by').val();
var searchFor = $('#shipper_search_for').val();
var warehouse = $('#warehouse').val();

$.get('index.php?p=api&r=json&c=location&m=find&d=' + searchBy + '/' + searchFor + '/shipper/' + warehouse  , function(data, status){

    data = $.parseJSON(data);

    $('#shipper_name').val(data['body'][0]['location_name']);
    $('#shipper_address1').val(data['body'][0]['address1']);
    $('#shipper_address2').val(data['body'][0]['address2']);
    $('#shipper_city').val(data['body'][0]['city']);
    $('#shipper_state').val(data['body'][0]['state']);
    $('#shipper_zip').val(data['body'][0]['zip']);
    $('#shipper_country').val(data['body'][0]['country']);

    $('#shipper_contact_name').val(data['body'][0]['contact_name']);
    $('#shipper_contact_phone').val(data['body'][0]['phone']);
    $('#shipper_contact_fax').val(data['body'][0]['fax']);
    $('#shipper_contact_email').val(data['body'][0]['email']);

    //here what i call it manually
    $('#shipperinfo').find('input:text').change();

});

});

その関数をそのイベントにバインドします。

function change_callback()
 {
    var valid = 0;

    if($('#shipper_name').val().length > 0){
        valid++;
    }

    if($('#shipper_address1').val().length > 0){
        valid++;
    }

    if($('#shipper_city').val().length > 0){
        valid++;
    }

    if($('#shipper_state').val().length > 0){
        valid++;
    }

    if($('#shipper_zip').val().length > 0){
        valid++;
    }

    if($('#shipper_country').val().length > 0){
        valid++;
    }

    if(valid == 6) {

        $('#shipper_ok').removeClass('hide');

    } else {

        $('#shipper_ok').addClass('hide');

    }

}

$('#shipperinfo').find('input:text').on('change', change_callback);

それを試してみて、これがあなたのために働くかどうか私に知らせてください。

于 2013-02-06T16:43:29.267 に答える