私は Handlebars.js と jquery を使用して HTML テンプレートを取得し、レンダリングしています。さまざまなブラウザー (IE10、IE9、FF、Safari、Chrome) では、これは完全に機能します。
ただし、IE8 を使用している場合、これはまったくうまく機能しません。入力フィールドを含むフォームをレンダリングしようとしています。フィールドはページに表示されますが、value 属性は別の属性で埋められます。
例:
<input id="lastName" autocomplete="off" required="" value="name=lastName"/>
そして、私は期待します:
<input id="lastName" autocomplete="off" required="" value="" name="lastName" />
テンプレートでは、これは次のようになります":
<input id="lastName" autocomplete="off" required="" value="{{lastName}}" name=lastName/>
これは、ハンドルバーによってロードする必要がある変数 lastName が空の場合にのみ発生します。この変数が空でない場合、この変数が読み込まれ、次のように正しい html が表示されます。
<input name="lastName" id="lastName" autocomplete="off" required="" value="Plaap"/>
ファイルのコンパイルが実際に問題であることがわかりました。コンパイルされたバージョンの属性は、二重引用符を失っているようです。
ページのコンパイル済みバージョンに警告すると、これは IE8 で div がどのように見えるかです。
<INPUT id=lastName value= name=lastName autocomplete="off" required>
これは、IE8 の HTML では最終的に次のようになります。
<input id="lastName" autocomplete="off" required="" value="name=lastName"/>
Firefox で同じアラートを見ると、同じ入力が次のようになります。
<input id="lastName" name="lastName" autocomplete="off" required="" value="" type="text">
テンプレートをロードするスクリプトは次のとおりです。
var htmlSource = $(data).html();
var template = Handlebars.compile(htmlSource);
//fill template with object or ''
var compiled = template(OF.address.attributes);
alert(compiled);
//now place the completely compiled html into the page
that.$el.html(compiled);
ここにいる誰かが以前にこの問題を抱えていた、またはこれを防ぐ方法を知っていますか?