1

http://djdavid98.zymichost.com/.tagguide/で Google Chrome を使用して私の Web サイトにアクセスし、検索ボックスを使用しようとすると (たとえば、「a」と入力して最初のオプションをクリック)、コンソールに表示されます。 、jQuery は をログに記録しUncaught TypeError: Cannot call method 'toLowerCase' of undefinedます。理由がわかりません。

問題はコードのこの部分にあるに違いありません。これを削除するとすべてが修正されるからです。

tagguide.js (20 ~ 46 行目):

$('#findname').typeahead({
    ...
    updater : function (item) {
        $('#ponies li:contains('+$(this).val()+')').parent().parent().parent().addClass('in');
        ...
    },
});

$('#findpony').typeahead({
    ...
    updater : function(item){
        $('#'+$('div.accordion-group > div > a.accordion-toggle:contains('+$(this).val()+')').attr('id')).addClass('in');
        ...
    },
});
4

2 に答える 2

1

実際には、縮小されたjQueryファイルの行にあり、矢印がそれを指しています:

2148

val: function( value ) {
    var hooks, ret, isFunction,
        elem = this[0];

    if ( !arguments.length ) {
        if ( elem ) {
            hooks = jQuery.valHooks[ elem.type ] ||
                    jQuery.valHooks[ elem.nodeName.toLowerCase() ]; //<<<<<<<

                if ( hooks && "get" in hooks && 
                     (ret = hooks.get( elem, "value" )) !== undefined ) {
                return ret;
        }

        ret = elem.value;

        return typeof ret === "string" ?
            // handle most common string cases
            ret.replace(rreturn, "") :
            // handle cases where value is null/undef or number
            ret == null ? "" : ret;
    }

    return;
}​

2174

エラーの場所を特定するときに、Chrome コンソールがその場所を「失う」ことがあることに気付きました。それらはすべて同じ場所ですぐに見つかります。パスをリセットするには、パスを手動で更新するだけです。

解決策は、エラーをスローしていitemた のコールバック引数から置き換える 2 つの方法であることが判明しました。$(this).val()

于 2013-01-01T02:16:37.790 に答える
0

jquery のエラー.val()は undefined の呼び出しからスローされます

この行

$('#ponies li:contains('+$(this).val()+')').parent().parent().parent().addClass('in');

試す

$('#ponies li:contains(a)').parent().parent().parent().addClass('in');

テキストボックスに「a」のみを入力した場合の値をシミュレートします。それが機能する場合は、$('#findname')代わりに.val() を取得する必要があります$(this)

そのコードをさらに読むと、$(this)が返される理由は、このコードundefinedで 2 の後に呼び出されているためだと思います。.attr()

$('#findpony').attr('placeholder',function(){
    // code removed     
}).attr('title',function(){
            // code removed
}).typeahead({
    source  : ponylist,
    updater : function(item){ 
        $('#'+$('div.accordion-group > div > a.accordion-toggle:contains('+$(this).val()+')').attr('id')).addClass('in');
        return item;
    },
});

参照してください - $('#findpony').attr('placeholder').attr('title') の後に #(this) を呼び出しています

于 2013-01-01T02:07:21.247 に答える