2013年7月20日土曜日

IE10 の互換モードで jquery.validate.unobtrusive を使うとエラー

最近ハマったのでメモ。解決策は以下の記事を参考にしました。

エラーの内容

jquery.validate.unobtrusive を IE10の互換モードで利用するとこんなエラーが出ることがあります。

行: 2699
エラー: メンバーが見つかりません。

どうやらページ内に form があるだけで起こるようで、jQuery その他のスクリプトが全滅して全く動かなくなります。怖い。

なんとなく IE10 の互換モードのバグっぽい雰囲気ですが、時間がなかったためあまり詳しく調べることができませんでした。(いいわけ)

jQuery の以下の set メソッド呼び出しで、novalidate という属性を設定しようとしてエラーが発生しているようです。

nodeHook = jQuery.valHooks.button = {
  get: function( elem, name ) {
   var ret;
   ret = elem.getAttributeNode( name );
   return ret && ( fixSpecified[ name ] ? ret.nodeValue !== "" : ret.specified ) ?
    ret.nodeValue :
    undefined;
  },
  set: function( elem, value, name ) {
   // Set the existing or create a new attribute node
   var ret = elem.getAttributeNode( name );
   if ( !ret ) {
    ret = document.createAttribute( name );
    elem.setAttributeNode( ret );
   }
   return ( ret.nodeValue = value + "" );
  }
 };

解決策

いろいろな記事を見て回ると、jQuery の中身を書き換えたりする方法もありましたが、ちょっと怖いので互換モードの指定で逃げました。

以下のように X-UA-Compatible で IE が利用可能な最新のレンダリングモードを指定します。

<meta http-equiv="X-UA-Compatible" content="IE=edge" />

おわりに

いろいろなところでこの問題がおきてテンション下がりました。

jquery.validate.unobtrusive は ASP.NET MVC のテンプレートに入っているし、form がページ内にあるだけでエラーが起こるので、結構影響大きいのではと思うのですが、全然日本語の記事がなかったので書いてみました。

TFT 10.14 Peeba Comp

こちらのガイドの自分用まとめです。 https://www.reddit.com/r/CompetitiveTFT/comments/hraunp/tft_1014_break_the_meta_new_peeba_comp_set_35/ 難しいですが完成すると非常に強く、プレ...