2011-05-24 16 views
23

Chrome、Firefox、IE8では正常に動作します。しかし、IE7でエラーが発生します。ここに私のjquery onchangeイベントがあります。IE7でJSONが定義されていません

$('select#NationId').change(function() { 
     var nationId = $(this).val(); 
     $.ajax({ 
      url: 'LoadAreas', 
      type: 'POST', 
      data: JSON.stringify({ nationId: nationId }), 
      dataType: 'json', 
      contentType: 'application/json', 
      success: function (data) { 
       $('select#AreaId').get(0).options.length = 0; 
       $('select#AreaId').append('<option value="0">Select All</option>'); 
       $.each(data, function (val, Areas) { 
        $('select#AreaId').append('<option value="' + Areas.Id + '">' + Areas.Name + '</option>'); 
       }); 
      } 
     }); 
    }); 

コントローラ

[HttpPost] 
    public ActionResult LoadAreas(int nationId) 
    { 
     var _Areas = (from c in SessionHandler.CurrentContext.ChannelGroups 
         join cgt in SessionHandler.CurrentContext.ChannelGroupTypes on c.ChannelGroupTypeId equals cgt.ChannelGroupTypeId 
         where cgt.Name == "Area" && c.ParentChannelGroupId == nationId 
         select new AreaName() { Id = c.ChannelGroupId, Name = c.Name }).OrderBy(m => m.Name); 

     if (_Areas == null) 
      return Json(null); 
     List<AreaName> managers = (List<AreaName>)_Areas.ToList(); 

     return Json(managers); 
    } 

答えて

28

問題はthe JSON object is not available in IE 7.です。JSON2.jをあなたのページに含めると、<のユーザーは8人です。

+0

私は。 onchangeイベントは起動しません。 – bladerunner

+1

まず、JSON2へ実際にホットリンクしていないと仮定しています;-)第2に、*イベント*はまったく起動していませんか? (これはIE7だけですか?) –

+0

json2.jsファイルにあるスクリプトをコピーして、それを自分のプロジェクトに追加し、そのマスターページのファイルを参照しました。 @bladerunner - あなたの '.change'ハンドラで' alert(nationId); 'を実行した場合、何もありません。 bladerunner

1

ブラウザはJSONオブジェクトを実装していない場合、あなたは常にあなたのためにそれを提供するために、a third-party libraryを使用することができます。私が正しくリコールすれば、この特定の実装は広く使用されており、ブラウザには依存しないので、それをドロップするだけでよいので、調整は必要ありません。

+0

こんにちはKyte、私のプロジェクトでjson2.jsをコピーし、そのファイルをスクリプトヘッダで参照しました。ドロップダウンはまったく機能しません。 – bladerunner

+2

@bladerunner:IE7がchange()を正しく処理しないためです(http://stackoverflow.com/questions/1637503/jquery-change-event-on-select-not-firing-in-ie)。 – Kyte

0

だけでは動作しませ

data: { "nationId": nationId }, 

べきでしょうか?

+0

私はこれをやろうとしましたが、onchangeは解雇されません。 – bladerunner

+0

引用符を付けると? – ZippyV

+0

いいえ、引用符でも機能しません。 – bladerunner

0
$('select#NationId').change(function() { 
    var nationId = $(this).val(); 
    var data = '{"nationId": "' + nationId + '"}'; 

    $.ajax({ 
     url: 'LoadAreas', 
     type: 'POST', 
     data: data , 
     dataType: 'json', 
     contentType: 'application/json', 
     success: function (data) { 
      $('select#AreaId').get(0).options.length = 0; 
      $('select#AreaId').append('<option value="0">Select All</option>'); 
      $.each(data, function (val, Areas) { 
       $('select#AreaId').append('<option value="' + Areas.Id + '">' + Areas.Name + '</option>'); 
      }); 
     } 
    }); 
});