Onclick etkinliğinde birden çok JavaScript işlevi nasıl çağrılır?


Yanıtlar:


390
onclick="doSomething();doSomethingElse();"

Ama gerçekten, hiç kullanmamanız onclickve Javascript kodunuz aracılığıyla olay işleyicisini DOM düğümüne eklemeniz daha iyi olur. Bu göze batmayan javascript olarak bilinir .


1
Göze batmayan JS'ye referans için teşekkürler, daha önce bununla karşılaştım ve tembel olduğum için rahatsız edici JS yazmaktan kaçınmalıyım! xD
Qcom

9
hiçbir prob ... Ben de gerçekten mütevazi hedefinize yardımcı olacak jQuery tavsiye ederim. Etkinlik işleyicilerini DOM öğelerine kolayca ekleyebilir ve çok daha fazlasını dikkat çekmeden yapabilirsiniz. 2 yıldır kullandım ve asla geriye bakmadım.
brad

4
Eğer onclick'de eylem denen biri başarısız olursa, her şey bir domino zinciri gibi düşer ve onclick çalışmaz.
Fiasco Labs

8
Bu html özniteliği aslında onclick=""değildir onClick="". Bu çok yaygın bir hatadır.
DrewT

2
@ShubhamChopra bahsettiğin şey jsxdeğil htmlve bu soru ile etiketlenmedijsx
DrewT

75

Tanımlanmış 1 fonksiyona sahip bir bağlantı

<a href="#" onclick="someFunc()">Click me To fire some functions</a>

Kaynağından birden fazla işlevi etkinleştirme someFunc()

function someFunc() {
    showAlert();
    validate();
    anotherFunction();
    YetAnotherFunction();
}

5
IMHO, bu gerçek programcının yaklaşımı.
b1nary.atr0phy

2
@ b1nary.atr0phy hayır. programcının yolu, kullanıcının javascript içermediği durumlarda href = "" özniteliğini eklemektir. daha sonra, javascript ile (böylece kullanıcının desteklediğini bilirsiniz) href'i kaldırır ve olaya olay dinleyicileri eklersiniz. bu şekilde, kodunuzun başka bir modülü aynı tıklamayı dinleyecekse, kodun üzerine yazılmaz veya kodunuzun üzerine yazılmaz. oku: developer.mozilla.org/tr-TR/docs/Web/API/Event
gcb

3
İşlevlere iletilen herhangi bir bağımsız değişkeniniz varsa, özellikle bu bağımsız değişkenleri sunucu tarafı dilinden oluşturuyorsanız, bu işe yaramayabilir. Hem sunucuda hem de istemcide tüm olası yinelemeleri test etmek yerine işlevleri (herhangi bir argümanla) sunucu tarafındaki dilde ekleyerek kodu oluşturmak / korumak daha kolay olacaktır.
Sifon

Bu çok güzel ve zarif
Tessaracter

38

JQuery değil, yalnızca JavaScript kullanıyorsanız gereken kod budur

var el = document.getElementById("id");
el.addEventListener("click", function(){alert("click1 triggered")}, false);
el.addEventListener("click", function(){alert("click2 triggered")}, false);

7
bu doğru cevap ve nasıl yapılacağının doğru yolu olmalıdır.
Füzyon

11

Bu element.addEventListeneryöntemi bir işleve bağlamak için kullanırdım. Bu işlevden birden fazla işlevi çağırabilirsiniz.

Bir olayı tek bir işleve bağlarken ve sonra birden çok işlevi çağırırken gördüğüm avantaj, bazı hata denetimleri gerçekleştirebilmeniz, bazı if ifadeleri alabilmenizdir, böylece bazı işlevler yalnızca belirli ölçütler karşılandığında çağrılır.


9

Elbette, birden fazla dinleyiciyi ona bağlayın.

Short cutting with jQuery

$("#id").bind("click", function() {
  alert("Event 1");
});
$(".foo").bind("click", function() {
  alert("Foo class");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="foo" id="id">Click</div>


@hunter: jQuery ile kısa kesiyordum. Yerel olay dinleyici kodunu tam olarak hatırlamıyorum. Marko'nun bahsettiği şeyi de yapabilirsiniz, ancak bir olay dinleyicisi kullanmak daha iyidir.
Josh K

1
Orijinal soruyu cevaplamamış olabilir, ancak jQuery kullandığım için benimkini yanıtladı.
Fiasco Labs

1
Bunu düz eski Javascript ile yapmanın herhangi bir yolu var mı?
CodyBugstein

4

ES6 Reaksiyonu

<MenuItem
  onClick={() => {
    this.props.toggleTheme();
    this.handleMenuClose();
  }}
>

2
@Bu JSX, bu soru jsx altında etiketlenmemiştir
Shubham Chopra

2

var btn = document.querySelector('#twofuns');
btn.addEventListener('click',method1);
btn.addEventListener('click',method2);
function method2(){
  console.log("Method 2");
}
function method1(){
  console.log("Method 1");
}
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>Pramod Kharade-Javascript</title>
</head>
<body>
<button id="twofuns">Click Me!</button>
</body>
</html>

Bir etkinliği bir veya daha fazla yöntemle gerçekleştirebilir / çağırabilirsiniz.


1

onclickHtml'de göz ardı edilen ve click2 triggeredhiçbir zaman yazdırılmayan ikinci özniteliğe sahip olsanız bile, kodla birden fazla ekleyebilirsiniz, eylemde bir tane ekleyebilirsiniz, mousedownancak bu sadece bir çözümdür.

Bu nedenle yapılacak en iyi şey, kodları aşağıdaki gibi eklemektir:

var element = document.getElementById("multiple_onclicks");
element.addEventListener("click", function(){console.log("click3 triggered")}, false);
element.addEventListener("click", function(){console.log("click4 triggered")}, false);
<button id="multiple_onclicks" onclick='console.log("click1 triggered");' onclick='console.log("click2 triggered");' onmousedown='console.log("click mousedown triggered");'  > Click me</button>

Olayların birikebileceği için dikkatli olmalısınız ve birçok olay eklerseniz, çalıştırıldıkları sıralamayı kaybedebilirsiniz.


1

Korunabilir JavaScript için bir ek, adlandırılmış bir işlev kullanıyor.

Bu anonim işlev örneğidir:

var el = document.getElementById('id');

// example using an anonymous function (not recommended):
el.addEventListener('click', function() { alert('hello world'); });
el.addEventListener('click', function() { alert('another event') });

Ancak, aynı öğeye bağlanmış birkaç taneniz olduğunu ve bunlardan birini kaldırmak istediğinizi düşünün. Bu olay dinleyicisinden tek bir anonim işlevi kaldırmak mümkün değildir.

Bunun yerine, adlandırılmış işlevleri kullanabilirsiniz:

var el = document.getElementById('id');

// create named functions:
function alertFirst() { alert('hello world'); };
function alertSecond() { alert('hello world'); };

// assign functions to the event listeners (recommended):
el.addEventListener('click', alertFirst);
el.addEventListener('click', alertSecond);

// then you could remove either one of the functions using:
el.removeEventListener('click', alertFirst);

Bu ayrıca kodunuzun okunmasını ve bakımını çok daha kolay hale getirir. Özellikle fonksiyonunuz daha büyükse.


Daha fazla bilgi için, "tutorialist" Avelx'in bu konuyla ilgili önerebileceğim güzel bir videosu var: youtube.com/watch?v=7UstS0hsHgI
Remi

0

Tüm işlevleri bir araya getirip çağırabilirsiniz.Ramdajs gibi kütüphanelerin birden fazla işlevi bir araya getirme işlevi vardır.

<a href="#" onclick="R.compose(fn1,fn2,fn3)()">Click me To fire some functions</a>

veya kompozisyonu js dosyasına ayrı bir işlev olarak koyabilir ve çağırabilirsiniz

const newFunction = R.compose(fn1,fn2,fn3);


<a href="#" onclick="newFunction()">Click me To fire some functions</a>

0

Bu brad anser'ın alternatifidir - virgülü aşağıdaki gibi kullanabilirsiniz

onclick="funA(), funB(), ..."

ancak bu yaklaşımı KULLANMAMAK daha iyidir - küçük projeler için yalnızca tek bir işlev çağrısı durumunda onclick'i kullanabilirsiniz (daha fazlası: göze batmayan javascript güncellenmiştir ).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.