私は、正常なブラウザーがすぐに提供できるさまざまな機能のためのIEシムを構築しています(残念ながら、私はIE7のサポートが必須である立場にあります)。
jQueryプロトタイプで次のメソッド定義が定義されています。
$.fn.textWidth = function(){
//some logic in here
}
shimSelect = function(selector){
$(selector).on('focus', function(){
$(this).each(function(index, element){
if(element.textWidth() > element.width){
//more logic
}
}
}
}
if (!$.support.leadingWhitespace) {
$(function() {
shimSelect("");
});
}
さまざまなconsole.logを慎重に追加することで、textWidthを呼び出す直前に、要素がHTMLElement(具体的にはHTMLSelectElement)であることがわかりました。
ただし、textWidth()の呼び出しを拒否しObject does not support this property or method
、IEおよびで失敗します。
Uncaught TypeError: Object #<HTMLSelectElement> has no method 'textWidth' shim.js:104
(anonymous function) togo_ie_shim.js:104
jQuery.extend.each jquery.js:612
jQuery.fn.jQuery.each jquery.js:242
(anonymous function) togo_ie_shim.js:103
jQuery.event.dispatch jquery.js:3064
elemData.handle.eventHandle
Chromeで
私の質問は、私のコードの何が問題になっているのかということです。なぜ失敗するのですか?そして、どうすれば同様のシムを正しく実装できますか?