0

スタックで見つかったコードからこのフィドルを作成しましたが、エラーが発生しています。助けてください。

私のフィドル: http://jsfiddle.net/422steve/DVNGc/

元のアンサー: https://stackoverflow.com/a/13000179/501173

私が得ているエラーは次のとおりです: TypeError: $allExtended.slideUp() は関数ではありません

js:

$('.holder').on('click','a',function(e){   
    e.preventDefault();
    var $allExtended = $(this).closest('.wrapperdoo').find('.extended'),
        $extended = $allExtended.eq( $(this).index() ),        
        doIt= ($extended.is(':visible')) ? $extended.slideUp() : ($allExtended.slideUp()) ($extended.slideDown());   
});
4

2 に答える 2

2

これが何が起こっているかです-あなたの三項演算で、最後の行で、あなたは2つの関数を呼び出そうとしています。それは不可能です。ifブロックを使用する必要があります。これが私がそれを書き直した方法です。doIt変数を何らかの目的で使用しているかどうかはわかりませんが、次のことを確認する必要がありundefinedます。

$('.holder').on('click','a',function(e){   
    e.preventDefault();
    var $allextended = $(this).closest('.wrapperdoo').find('.extended'),
        $extended = $allextended.eq( $(this).index() ),
        doIt = undefined;

    if ($extended.is(":visible")) {
        doIt = $extended.slideUp();            
    } else {
        $allextended.slideUp();
        doIt = $extended.slideDown();
    }  
});​

- - 編集 - -

クリックされているhrefにクラスを追加するには、関数で次のようにします。

$(this).addClass('class');

完了時にクラスを削除する場合は、次のようにします。まず、次のように、この変数をグローバル変数として割り当てます(this変数が混同されないようにします)。

var sender = $(this);

次に、slideUp()またはslideDown()関数の2番目のパラメーターは、完了時のコールバックです。

$allextended.slideUp(500, function() { sender.removeClass('class'); });
于 2012-11-18T03:42:46.190 に答える
1

($allextended.slideUp()) ($extended.slideDown())は非常に間違っています。
あなたが書いたコードは を呼び出しslideUp()、次に の戻り値をslideUp関数として呼び出し、 を渡しslideDown()ます。

2 つのステートメントを実行しようとしているようです。ifそのためには、ブロックが必要です。

于 2012-11-18T03:37:37.790 に答える