2017-11-23 9 views
2

関数を宣言して他の関数に使用したいと思います。この例では、呼び出された関数はアラートを表示しますが、背景色は変更しません。しかし、私が$('.box').click(function() {...の中の関数を宣言すれば、それは正しく動作します。正しく関数を宣言する場所jQuery

私は間違っていますか?どのように関数をグローバルに宣言することができますか?

$(document).ready(function() { 
 

 
    function changeColor() { 
 
     $(this).css('background-color','red'); 
 
     alert('Color changed!'); 
 
    } 
 
    
 
    $('.box').click(function() { 
 
    \t changeColor(); 
 
    }) 
 
});
.box { 
 
    width: 100px; 
 
    height: 100px; 
 
    border: 1px solid black; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="box"></div>

+0

文書の準備ができていません。この関数は、ドキュメントが準備されている場合にのみ存在します。 – Martijn

+0

'$( '。box')。クリック(changeColor)' – mplungjan

答えて

0

あなたはこのようなchangeColorを呼び出す場合、コンテキストthisは何をしたい、グローバルオブジェクトwindowではないだろう。

簡単な解決策は、パラメータとして関数にパス素子を渡すために、次のようになります。

$(document).ready(function() { 
 

 
    function changeColor(element) { 
 
    $(element).css('background-color', 'red'); 
 
    console.log('Color changed!'); 
 
    } 
 

 
    $('.box').click(function() { 
 
    changeColor(this); 
 
    }) 
 
});
.box { 
 
    width: 100px; 
 
    height: 100px; 
 
    border: 1px solid black; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="box"></div>

+0

できます要素の参照を渡している場合、ドキュメントの外の関数を準備してください。 –

+0

@MuhammadOmerAslam勿論、関数はどこにでもあります。 – dfsq

+0

ちょうどあなたが彼がまだそれを内部に宣言する必要があると仮定したかもしれないと思っているかもしれないと思っているように、あなたは若者のためにそれを変更したいと思っています:)、歓声 –

0

あなたは.boxのオブジェクトを渡す必要があります。あなたが呼び出している関数は、$(this)を使用して.boxのオブジェクトを取得することはありません。そのため、関数上でthisオブジェクトを渡す必要があります。

$(document).ready(function() { 
 

 
    function changeColor(that){ 
 
     $(that).css('background-color','red'); 
 
     alert('Color changed!'); 
 
    } 
 
    
 
    $('.box').click(function() { 
 
    \t changeColor(this); 
 
    }) 
 
});
.box { 
 
    width: 100px; 
 
    height: 100px; 
 
    border: 1px solid black; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="box"></div>

これはあなたに役立つことを願っています。

0

clickイベントの外で関数を使用する場合は、パラメータとしてthisを渡す必要があります。

function changeColor($this) { 
     $($this).css('background-color','red'); 
     alert('Color changed!'); 
    } 


    $('.box').click(function() { 
    changeColor(this); 
    }) 
+0

'$ this'はjQueryオブジェクトではありません – charlietfl

+0

ありがとうございました –

0

だけで直接イベントハンドラとして関数を渡すか、匿名にする、そうでない場合$(this)がされますウィンドウであり、要素ではない

$(document).ready(function() { 
 

 
    function changeColor() { 
 
    $(this).css('background-color', 'red'); 
 
    alert('Color changed!'); 
 
    } 
 

 
    $('.box').click(changeColor) 
 
});
.box { 
 
    width: 100px; 
 
    height: 100px; 
 
    border: 1px solid black; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="box"></div>

関連する問題