2017-11-23 13 views
2

Ich möchte eine Funktion deklarieren und sie in andere Funktionen verwenden. In diesem Beispiel zeigt die aufgerufene Funktion den Alarm an, ändert jedoch nicht die Hintergrundfarbe. Aber wenn ich die Funktion innerhalb der $('.box').click(function() {... deklariere, dann funktioniert es richtig.Wo richtig deklarieren Sie eine Funktion jQuery

Was mache ich falsch? Wie kann ich eine Funktion global deklarieren?

$(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

Nicht im Dokument bereit. Jetzt existiert die Funktion nur, wenn das Dokument bereit ist. Sie wollen es, in einer separaten Datei, außerhalb von Bereichen (wie doc_ready) – Martijn

+0

'$ ('. Box'). Klicken (changeColor)' – mplungjan

Antwort

0

Wenn Sie changeColor wie diese dann Kontext nennen thiswindow globales Objekt sein wird, nicht das, was Sie wollen.

einfache Lösung wäre Passelement in der Funktion als Parameter übergeben:

$(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

Sie können Deklarieren Sie die Funktion outside document ready, wenn Sie die Elementreferenz übergeben –

+0

@MuhammadOmerAslam Absolut, jetzt Funktion kann überall sein. – dfsq

+0

wollte nur, dass Sie es für den Jungen ändern, wie er versucht zu lernen, vielleicht nimmt er an, dass er es immer noch innen erklären muss :), Prost –

0

Sie müssen die Aufgabe der .box passieren. Die Funktion, die Sie aufrufen, wird nicht das Objekt .box mit der $(this) erhalten, deshalb müssen Sie das Objekt this über die Funktion übergeben.

$(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>

Hoffnung Ihnen dies hilfreich sein wird.

0

Um die Funktion außerhalb des Klickereignisses zu verwenden, sollten Sie this als Parameter übergeben.

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


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

'$ this' ist kein jQuery-Objekt – charlietfl

+0

Danke behoben –

0

einfach die Funktion als Event-Handler übergeben direkt oder anonym machen, da sonst die $(this) wird die Fenster und nicht das Element

$(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>

Verwandte Themen