2017-08-05 11 views
0
$('.header_menu_item').on('mouseenter',function(){ 
    var default_img = $(this).find('.header_menu_item_icon_img').attr('src'); 
    var hover_img = $(this).find('.header_menu_item_icon_img').attr('data-hover'); 
    $(this).find('.header_menu_item_icon_img').prop('src',hover_img); 
}).on('mouseleave',function(){ 
    $(this).find('.header_menu_item_icon_img').prop('src',default_img); 
}); 

次のmouseleave関数にdefault_img varを渡すにはどうすればよいですか? 助けてくれてありがとう:)javascriptで変数を他の関数に渡す

答えて

2

1つのオプションは、2つの機能の外に変数を宣言します。

要素自体のデータとして
var default_img = ''; 
$('.header_menu_item').on('mouseenter',function(){ 
default_img = $(this).find('.header_menu_item_icon_img').attr('src'); 
    var hover_img = $(this).find('.header_menu_item_icon_img').attr('data-hover'); 
    $(this).find('.header_menu_item_icon_img').prop('src',hover_img); 
}).on('mouseleave',function(){ 
    $(this).find('.header_menu_item_icon_img').prop('src',default_img); 
}); 
1

設定をして、あなたはまた、手の前に*上の属性データ - を設定することができ、後でネイティブJS

//setting 
this.dataset['default_img'] = default_img; 

//retrieving 
var img = this.dataset['default_img']; 

を通じて

//setting 
$(this).data('default_img',default_img); 

//retrieving 
var img = $(this).data('default_img'); 

それを取得html自体はJSを使用して初期データを設定する必要はありません

<img src="http://example.com/someimg.jpg" data-default_img="http://example.com/someimg.jpg" /> 

jQuery's data() method

0

dataset reference

data-* attributes reference

あなたはグローバル変数を使用する必要があります。関数は、外部から呼び出される関数ではなく、呼び出す関数に直接変数を渡すことができます。

var default_img; 
$('.header_menu_item').on('mouseenter',function(){ 
    default_img = $(this).find('.header_menu_item_icon_img').attr('src'); 
    var hover_img = $(this).find('.header_menu_item_icon_img').attr('data-hover'); 
    $(this).find('.header_menu_item_icon_img').prop('src',hover_img); 
}).on('mouseleave',function(){ 
    $(this).find('.header_menu_item_icon_img').prop('src',default_img); 
}); 
+1

default_imgは「(異なることがあります。 head_menu_item ')、それぞれのheader_menu_itemでdefault_imgを保存する必要があります。 –

+0

@ThomasFellingerネストされていない限り、それが起こる可能性はありません。 – Barmar

+0

私は、失敗を得るために何とかオーバーラップして配置する必要があると思います。 –

-1

あなたはそれを直接渡すことはできません - あなたは外側の変数に格納することができます - しかし、あなたは、各項目でそれをしなければならない:あなたは2 $を入力した場合

$('.header_menu_item').each(function(){ 

    var $header_menu_item_icon_img = $(this).find('.header_menu_item_icon_img'), 
     default_img = $header_menu_item_icon_img.attr('src'), 
     hover_img = $header_menu_item_icon_img.attr('data-hover'); 

    $(this).on('mouseenter',function(){ 
    $header_menu_item_icon_img.prop('src',hover_img); 
    }).on('mouseleave',function(){ 
    $header_menu_item_icon_img.prop('src',default_img); 
    }); 
}); 
+0

'mouseleave'関数に' default_img'変数を渡したいだけでした。なぜ 'each'関数が必要ですか??? – SwapNeil

+0

default_imgはmenu_itemごとに異なる可能性があり、グローバル変数で上書きできます –