0

私は、正常なブラウザーがすぐに提供できるさまざまな機能のための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で

私の質問は、私のコードの何が問題になっているのかということです。なぜ失敗するのですか?そして、どうすれば同様のシムを正しく実装できますか?

4

1 に答える 1

1

関数は、引数としてjqueryオブジェクトを提供しません。これはDOMオブジェクトです。

jQuery.each( collection, callback(indexInArray, valueOfElement) )

jqueryオブジェクトを拡張したため、要素には関数textWidthが定義されていません。

$(element)代わりに:を使用してみてください。

于 2013-02-26T03:11:37.310 に答える