2012-04-08 11 views
0

現在、JSON Webサービスの色をドロップダウンリストに読み込むJQueryプラグインを作成しています。 ドロップダウンリストの背景色は、選択した値に応じて変化します。ほとんどの場合、それは働いています。どのような通常の変更でも、期待通りに動作しますが、私が持っている問題は、最初のページの読み込み時にtriggerHandler( "change")を使用しています。そしてそれが引き金が、私はそれがドロップダウンリスト上の色の変化を引き起こさないように、ページのロードのドロップダウンリストから選択した値に未定義のエラーを得ているようだ

私のコードは次のとおりです。

$.fn.bindColorsList = function (options) { 

    var defColor = options.defaultColor; 
    var svcUrl = options.svcurl; 
    //var f_target = options.filterTarget; 
    var $this = this; 

    $.ajax({ 
     url: options.svcurl, 
     dataType: 'json', 
     /*data: { filter: src_filt },*/ 
     success: function (fonts) { fillcolors(fonts, $this) }, 
     error: function() { appendError(f_target, "colors failed to load from server") } 


    }); 


    this.on("change", function (event) { 
     log($(event.target).attr("id") + " change detected"); 

     //change ddl dropdown color to reflect selected item ; 
     var hcolor = $this.find('option:selected').attr("name"); 


     $this.attr("style", "background-color:" + hcolor); 


    }); 

function fillcolors(colors, target) { 

    $(target).empty(); 
    $.each(colors, function (i, color) { 
     $(target).append("<option name='"+color.HexValue+"' value='" + color.Name + "' style='background-color:"+color.HexValue+"'>"+color.Name+"</option>"); 
    }); 
}; 



//in a seperate file 
    $(document).ready(function() { 

     $("#dd-font-color").bindColorsList({ svcurl: "/home/colors"}); 
     $("#dd-back-color").bindColorsList({ svcurl: "/home/colors" }); 




    }); 
+0

適切なスペルと句読点を使用すると、テキストを読みやすくなります。それを正しくフォーマットしてください:http://meta.stackexchange.com/a/128558/142802私は文章の始まりと終わりを見ることさえできません。 –

+0

問題のデモを作成できますか? – Starx

+0

'this 'の代わりに' $ this'を使うのは、両方が同じものを指していて、混乱する必要はなく、選択に沿って矛盾が生じるかもしれません。 – Starx

答えて

1

あなたは、非同期のドロップダウンリストを作成するためにAJAXリクエストを実行しています。この場合は、AJAXリクエストのコールバックsuccessでイベントをトリガーする必要があります。

var $this = this; 

// Bind the onchange event 
$this.on("change", function (event) { 
    .. 
}); 

// Populate using AJAX 
$.ajax({ 
    ... 
    success: function (fonts) { 
    // Populate the values 
    fillcolors(fonts, $this); 
    // Trigger the event 
    $this.trigger("change"); 
    }, 
    ... 
}); 

これだけです。

+0

私は前にそれを試してみましたが、別のショットを与えて、それがどのようになっているかを教えてくださいと思います –

+0

猿の叔父はそれが単純だと信じています –

+0

私は成功コールバックで同期して定義した各コマンドがそうですか?私はまだコールバックのアイデアに使用されていないので、まだ使用されていません。 –

関連する問題