2011-12-15 6 views
0

したがって、私はJsonオブジェクト値によって入力されるはずのドロップダウンメニューを持っています。コードは次のようになります。特定のjavascriptコードはアラートステートメントでのみ動作します

$("#sport").val(model.SportId); 

まあ、ページを読み込むとうまくいきません。ドロップダウンリストのデフォルトは、デフォルトの「None Selected」オプションです。だから私はゲットーデバッグを行い、何が起きているかを見るためにmodel.SportIdにアラートを出します。

ページを更新すると...動作します。私がやった唯一の事は、それが「1」と言うポップアップウィンドウを立ち上げると、メニューの値のドロップダウンはそのオプションのテキストですオプション「メジャーリーグ」(に行く

alert(model.SportId); 

ました値)。それでおしまい。それが私が変えた唯一のものです。最初のコード行の前に警告を出します。コードの後ろにアラートを置くと、機能しません。なぜこのことが分かりませんか?

Jsonオブジェクトの派生元のviewmodelには、nullを指定できるintとしてSportIdがあります。それはそれと関係がありますか?

編集:

さて、私のかみそりビューで、これは私が持っているのjavascriptですので:

<script type="text/javascript"> 
$(document).ready(function() { 
    var [email protected](Json.Encode(Model.Title)); 
    var [email protected](Json.Encode(Model)); 
    var sportsurl='@Url.Action("GetSports", "Titles")'; 
    var sportsteamsurl='@Url.Action("GetSportsTeams", "Titles")'; 

    TitleBasicEdit(model, read, sportsurl, sportsteamsurl); 
}); 

とJavaScript関数titlebasiceditです:

function TitleBasicEdit(model, url, read, backurl, seasonsurl, autocompleteurl, urlforward, sportsurl, sportsteamsurl) { 
if ((model.TitleTypeId == 3) || (model.TitleTypeId == 8)) { 
    GetSports(sportsurl); 
    SportsDependency(sportsteamsurl); 
    alert(model.SportId); 
    $("#sport").val(model.SportId); 
    $("#sport").change(); 
    $("#hometeam").val(model.HomeSportTeamId); 
    $("#awayteam").val(model.AwaySportTeamId); 
} 
+0

あなたのマークアップ/ jsの詳細を表示できますか? – hunter

+0

もっとコードしてください –

+0

'.ready'関数にはありますか? – pimvdb

答えて

3

オプション(ajaxリクエストなど)を入力している間に実行する非同期タスクに関連する問題です。これはalert()が動作する理由です:タスクが完了するのに十分な時間があるようにjavascriptの実行を停止します(とにかくリンクは本当に高く評価されます)。

編集:GetSports()関数がそのタスクになる可能性があります。

+0

これが問題になります。アラートはjsの実行を変更し、非同期のajaxコールが終了するようにします。その結果、ajaxコールはコントロールに値を設定し、その後のコードで値を読み取ることができます。コールバックを使用して、コールバック関数でアラートの後にコードを実行する必要があります。このコールバック関数は、ajax呼び出しが返ったときに呼び出されます。 – CaffGeek

+0

ええ、そうだった。 AJAXの非同期について忘れました。 –

+0

@chadまたはjquery 1.5+を使用している場合は、$ .Deferredオブジェクトを使用することもできます(ネストされたコールバックはありません) – fcalderan

0

model.SportIdはtypeof === 'number'なのではないのだろうか?あなたはこれを試しましたか? jQueryのは、この処理するのに十分なスマートでなければなりませんので、それは、しかし働くだろう、なぜ私にはわからない。また

$("#sport").val(model.SportId+''); 

を、これを試してみてください。

alert($("#sport").length); 
$("#sport").val(model.SportId); 
alert($("#sport").length); 

は、それはあなたのjavascriptが前に実行されている可能性がありHTMLが読み込まれます。 alert()は、ロードするのに十分な時間を与えるかもしれません。

関連する問題