2014-12-18 19 views
8

Bir düğmeye ben düğmeye vanilya javascript onclick yöntem takmak ve tıklamada başlamak çağrıBeyan edilmiş bir işlev yerine bir işlev ifadesi ile onclick nasıl kullanılır?

var startButton = $('#startButton').get(0); 

var.

startButton.onclick = start; 

Ben

function start() { 
    console.log('requesting local stream'); 
    startButton.disabled = true; 
    getUserMedia(constraints, gotStreamSuccess, errorCallback); 
} 

nasıl

yazabilirim gelmez

var start = function() { 
    console.log('requesting local stream'); 
    startButton.disabled = true; 
    getUserMedia(constraints, gotStreamSuccess, errorCallback); 
} 

bir fonksiyonu olarak ilan başlatmak bu çağırmaz işlev ifadesini ancak (nedeniyle kaldırma için?) Kullanmak istiyorum

startButton.onclick = start; 

bir ile çalışır, böylece işlev ifadesi?

Teşekkür

+0

Hey Will hakkında

Ödeme, bir cevap işaretlemek için unutma. :-) – Adam

cevap

2
Ben bir kaldırma sorunu olduğunu size katılıyorum olurdu

, uygun şekilde startButton.onclick = start; ayarlamadan önce onu kaldırma için Kodunuzdaki bakmak gerekecek.

İşte MDN sözdizimi hakkında söyleyeceklerini var: Syntax for on click

Özel olarak işlev beyan veya ifade edilebilen ya bahseder. Hangi, benim için, tekrar direğe götürür, çünkü işlev bildirimleri otomatik olarak kaldırılır. onclick için MDN

bir işlevi bildirimi kullanır. Kullanmak istediğiniz gibi bir işlev ifadesi kullanmak için bu JSFiddle örneğini değiştirdim. Doğru kaldırma ile, düğmeye tıkladığınızda doğru yöntemi çağırıyor.

+0

Teşekkürler Adam - bildirilene çok benziyor, bunun üzerine gitmenin en iyi yolu – WillLA

2

sorununuzun açıklaması bakılırsa, startButton.onclick atamadan sonra start(ve tanımlayın) beyan görünüyor. Bu durumda, startButton.onclick gerçekten undefined olacaktır. atama kodda buna sahip tam gerçekleşir gibi kod, bu ilan edilmiştir biliyor ama henüz değerini bilmiyor -

Ne çekiliyor değişken kendisidir. Şöyle düşünün: var anahtar kelime kullandığınızda, ancak, henüz tanımlanmamış bir değişken, beyan ederim. Hemen bir değer atarsanız, yeni değer, ödev üzerindeki kodla görünmez.

Aşağıdaki örneği inceleyelim: konsola giriş yapmanız beklenir üç değerden

var a = 1; 
console.log(a); 
var a = 2; 
var a = 3; 

hangisi? 1, 2 veya 3?
Sen (ben bunu tavsiye etmem gerçi) istediğiniz gibi tek tanımlayıcı için birçok kez var kullanabilirsiniz; ardışık beyanlar basitçe göz ardı edilir, sadece ödevler dikkate alınır. Bu nedenle, bir ödev kaldırılamaz.

Fonksiyon bildirimleri, ancak, kendi bütünlükleri içerisinde çekilir edilebilir ve işlev bildirimi senin durumunda çalışmış kullanarak nedeni bu, bir bakıma sınırlı.

Sorunu çözmek için gerçekten bir işlev bildirimi kullanabilir veya startButton.onclick = start;'dan önce değişken atamasını gerçekleştirebilirsiniz (ve bu durumda gerçekten bir değişkene ihtiyacınız olmadığını düşünüyorum, bu işlev için bir işlev bildirimi kesinlikle uygundur). Ayrıca yapabilirdi

Not:

startButton.onclick = function() { // I'm a function expression too! 
    // do something here 
} 
0

olay eki işlevi ifade oluşturulduktan sonra gerçekleşmelidir. Bu example

<button id="click">Click</button> 
<button id="click2">Click2</button> 

$(function(){ 

    var startButton = $("#click").get(0); 
    var startButton2 = $("#click2").get(0); 

    startButton.onclick = clickFunc; // wont work 

    var clickFunc = function() { 
    alert('click'); 
    }; 

    startButton2.onclick = clickFunc; // work 
}); 
İlgili konular