2017-07-18 20 views
-3

私のJSでは次のように 'navigateToが定義されていません'というエラーが発生します。私は、関数navigateToをパラメータとしてopenCart()関数に渡したので、どこが間違っているのかはっきりしていますか?別の関数エラーにパラメータとして関数を渡す

$(function() { 
    var form = $('form#checkout-form'), 
    $sections = $('[data-step]'); 

    function navigateTo(index) { 
     $sections.removeClass('is--active').eq(index).addClass('is--active'); 
    } 
}); 

$(document).on('click', 'nav.main a.cart', function(e) { 
    openCart(); 
}); 
function openCart(navigateTo) { 
    navigateTo(1); 
    disableScroll = false; 
} 
+2

navigateToはスコープではありません。他の関数から呼び出すために、この関数を高いスコープに入れてください。 –

+3

これはかなり簡単なことです。それはすべて「スコープ」に関係しています。 'DOM'レディ機能で' openCart() 'を呼び出しても、' navigateTo() 'は' openCart() 'のスコープで定義されていません – Ionut

答えて

1

あなたの関数openCartは、それ以外の場合は、機能とあなたがopenCart(navigateTo)ようopencart関数にパラメータnavigateToとしてコールバックを渡す必要があり、別のものを呼び出さないDOMレディ機能の内部に行く必要があります。

$(function() { 
 
    var form = $('form#checkout-form'), 
 
    $sections = $('[data-step]'); 
 

 
    function navigateTo(index) { 
 
    alert(2); 
 
     $sections.removeClass('is--active').eq(index).addClass('is--active'); 
 
    } 
 
    $(document).on('click', 'div', function(e) { 
 
     openCart(navigateTo); 
 
    }); 
 
    function openCart(navigateTo) { 
 
     navigateTo(1); 
 
     disableScroll = false; 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div>hahah</div>

-1

これは範囲の問題です。クローズアップであなたの全体のスクリプトをラップし、あなたは大丈夫でしょう;

(function($) { 
    // your script here 
})(jQuery) 

しかし、最初のブロックの周りにも$(function() { }を取り除いてください。

関連する問題