Wie finde ich die ID der Schaltfläche, auf die geklickt wird?
<button id="1" onClick="reply_click()"></button>
<button id="2" onClick="reply_click()"></button>
<button id="3" onClick="reply_click()"></button>
function reply_click()
{
}
Wie finde ich die ID der Schaltfläche, auf die geklickt wird?
<button id="1" onClick="reply_click()"></button>
<button id="2" onClick="reply_click()"></button>
<button id="3" onClick="reply_click()"></button>
function reply_click()
{
}
Antworten:
Sie müssen die ID als Funktionsparameter senden. Mach es so:
<button id="1" onClick="reply_click(this.id)">B1</button>
<button id="2" onClick="reply_click(this.id)">B2</button>
<button id="3" onClick="reply_click(this.id)">B3</button>
<script type="text/javascript">
function reply_click(clicked_id)
{
alert(clicked_id);
}
</script>
Dadurch wird die ID gesendet, this.id
als clicked_id
die Sie in Ihrer Funktion verwenden können. Sehen Sie es hier in Aktion.
event.target.id
(für mich haben sowohl Firefox als auch IE diese ausgelöst), eine großartige Lösung ist, die in allen drei Hauptbrowsern funktioniert.
Im Allgemeinen ist es einfacher, die Dinge zu organisieren, wenn Sie Ihren Code und Ihr Markup trennen. Definieren Sie alle Ihre Elemente und definieren Sie dann in Ihrem JavaScript-Abschnitt die verschiedenen Aktionen, die für diese Elemente ausgeführt werden sollen.
Wenn ein Ereignishandler aufgerufen wird, wird er im Kontext des Elements aufgerufen, auf das geklickt wurde. Also die Kennung dies wird sich auf das DOM - Element , dass Sie angeklickt. Über diesen Bezeichner können Sie dann auf Attribute des Elements zugreifen.
Beispielsweise:
<button id="1">Button 1</button>
<button id="2">Button 2</button>
<button id="3">Button 3</button>
<script type="text/javascript">
var reply_click = function()
{
alert("Button clicked, id "+this.id+", text"+this.innerHTML);
}
document.getElementById('1').onclick = reply_click;
document.getElementById('2').onclick = reply_click;
document.getElementById('3').onclick = reply_click;
</script>
VERWENDUNG VON PURE JAVASCRIPT: Ich weiß, dass es spät ist, aber für die zukünftigen Menschen kann es helfen:
Im HTML-Teil:
<button id="1" onClick="reply_click()"></button>
<button id="2" onClick="reply_click()"></button>
<button id="3" onClick="reply_click()"></button>
Im Javascipt Controller:
function reply_click()
{
alert(event.srcElement.id);
}
Auf diese Weise müssen wir die 'id' des Elements zum Zeitpunkt des Aufrufs der Javascript-Funktion nicht binden.
this
als Parameter übergeben habe onClick
(eigentlich nicht mit onClick, sondern mit onChange, ist das vielleicht das Problem?). Ich habe auch ein bisschen nachgesehen und es scheint viel Verwirrung über diese event
Variable zu geben - ist es ein "impliziter" Parameter oder muss es explizit als Argument angegeben werden (dh function reply_click(event)
was ich auch in gesehen habe? einige Standorte)? Ist es nur verfügbar, wenn der Ereignis-Listener über addEventListener
... zugewiesen wird? Ich habe herumgespielt, konnte es aber nicht zum Laufen bringen.
(Ich denke, die id
Attribut muss mit einem Buchstaben beginnen. Könnte falsch sein.)
Sie könnten sich für eine Eventdelegation entscheiden ...
<div onClick="reply_click()">
<button id="1"></button>
<button id="2"></button>
<button id="3"></button>
</div>
function reply_click(e) {
e = e || window.event;
e = e.target || e.srcElement;
if (e.nodeName === 'BUTTON') {
alert(e.id);
}
}
... aber dafür müssen Sie sich mit dem verrückten Eventmodell relativ wohl fühlen.
e
Argument in allen guten modernen Browsern automatisch generiert. Wenn dies nicht der Fall ist, müssen wir uns mit IE6-8 befassen, das stattdessen dieses nützliche Objekt über bereitstellt window.event
.
Es wird allgemein empfohlen, Inline-JavaScript zu vermeiden, aber es gibt selten ein Beispiel dafür.
Hier ist meine Art, Ereignisse an Schaltflächen anzuhängen.
Ich bin nicht ganz zufrieden damit, wie lange die empfohlene Methode mit einer einfachen Methode verglichen wirdonClick
Attribut wird.
<button class="btn">Button</button>
<script>
let OnEvent = (doc) => {
return {
on: (event, className, callback) => {
doc.addEventListener('click', (event)=>{
if(!event.target.classList.contains(className)) return;
callback.call(event.target, event);
}, false);
}
}
};
OnEvent(document).on('click', 'btn', function (e) {
window.console.log(this, e);
});
</script>
<!DOCTYPE html>
<html>
<head>
<script>
(function(doc){
var hasClass = function(el,className) {
return el.classList.contains(className);
}
doc.addEventListener('click', function(e){
if(hasClass(e.target, 'click-me')){
e.preventDefault();
doSomething.call(e.target, e);
}
});
})(document);
function insertHTML(str){
var s = document.getElementsByTagName('script'), lastScript = s[s.length-1];
lastScript.insertAdjacentHTML("beforebegin", str);
}
function doSomething(event){
console.log(this.id); // this will be the clicked element
}
</script>
<!--... other head stuff ...-->
</head>
<body>
<!--Best if you inject the button element with javascript if you plan to support users with javascript disabled-->
<script>
insertHTML('<button class="click-me" id="btn1">Button 1</button>');
</script>
<!--Use this when you don't care about broken buttons when javascript is disabled.-->
<!--buttons can be used outside of forms https://stackoverflow.com/a/14461672/175071 -->
<button class="click-me" id="btn2">Button 2</button>
<input class="click-me" type="button" value="Button 3" id="btn3">
<!--Use this when you want to lead the user somewhere when javascript is disabled-->
<a class="click-me" href="/path/to/non-js/action" id="btn4">Button 4</a>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
(function(doc){
var cb_addEventListener = function(obj, evt, fnc) {
// W3C model
if (obj.addEventListener) {
obj.addEventListener(evt, fnc, false);
return true;
}
// Microsoft model
else if (obj.attachEvent) {
return obj.attachEvent('on' + evt, fnc);
}
// Browser don't support W3C or MSFT model, go on with traditional
else {
evt = 'on'+evt;
if(typeof obj[evt] === 'function'){
// Object already has a function on traditional
// Let's wrap it with our own function inside another function
fnc = (function(f1,f2){
return function(){
f1.apply(this,arguments);
f2.apply(this,arguments);
}
})(obj[evt], fnc);
}
obj[evt] = fnc;
return true;
}
return false;
};
var hasClass = function(el,className) {
return (' ' + el.className + ' ').indexOf(' ' + className + ' ') > -1;
}
cb_addEventListener(doc, 'click', function(e){
if(hasClass(e.target, 'click-me')){
e.preventDefault ? e.preventDefault() : e.returnValue = false;
doSomething.call(e.target, e);
}
});
})(document);
function insertHTML(str){
var s = document.getElementsByTagName('script'), lastScript = s[s.length-1];
lastScript.insertAdjacentHTML("beforebegin", str);
}
function doSomething(event){
console.log(this.id); // this will be the clicked element
}
</script>
<!--... other head stuff ...-->
</head>
<body>
<!--Best if you inject the button element with javascript if you plan to support users with javascript disabled-->
<script type="text/javascript">
insertHTML('<button class="click-me" id="btn1">Button 1</button>');
</script>
<!--Use this when you don't care about broken buttons when javascript is disabled.-->
<!--buttons can be used outside of forms https://stackoverflow.com/a/14461672/175071 -->
<button class="click-me" id="btn2">Button 2</button>
<input class="click-me" type="button" value="Button 3" id="btn3">
<!--Use this when you want to lead the user somewhere when javascript is disabled-->
<a class="click-me" href="/path/to/non-js/action" id="btn4">Button 4</a>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
(function($){
$(document).on('click', '.click-me', function(e){
doSomething.call(this, e);
});
})(jQuery);
function insertHTML(str){
var s = document.getElementsByTagName('script'), lastScript = s[s.length-1];
lastScript.insertAdjacentHTML("beforebegin", str);
}
function doSomething(event){
console.log(this.id); // this will be the clicked element
}
</script>
<!--... other head stuff ...-->
</head>
<body>
<!--Best if you inject the button element with javascript if you plan to support users with javascript disabled-->
<script type="text/javascript">
insertHTML('<button class="click-me" id="btn1">Button 1</button>');
</script>
<!--Use this when you don't care about broken buttons when javascript is disabled.-->
<!--buttons can be used outside of forms https://stackoverflow.com/a/14461672/175071 -->
<button class="click-me" id="btn2">Button 2</button>
<input class="click-me" type="button" value="Button 3" id="btn3">
<!--Use this when you want to lead the user somewhere when javascript is disabled-->
<a class="click-me" href="/path/to/non-js/action" id="btn4">Button 4</a>
</body>
</html>
Sie können dies ausführen, bevor das Dokument fertig ist. Wenn Sie auf die Schaltflächen klicken, funktioniert dies, da das Ereignis an das Dokument angehängt wird.
Hier ist eine jsfiddle
Aus irgendeinem seltsamen Grund dieinsertHTML
funktioniert Funktion nicht, obwohl sie in allen meinen Browsern funktioniert.
Sie können immer ersetzen insertHTML
mit , document.write
wenn Sie nichts dagegen ist es nicht Nachteile
<script>
document.write('<button class="click-me" id="btn1">Button 1</button>');
</script>
Quellen:
Wenn Sie der onclick-Funktion keine Argumente übergeben möchten, verwenden Sie einfach event.target
, um das angeklickte Element abzurufen :
<button id="1" onClick="reply_click()"></button>
<button id="2" onClick="reply_click()"></button>
<button id="3" onClick="reply_click()"></button>
function reply_click()
{
// event.target is the element that is clicked (button in this case).
console.log(event.target.id);
}
Mit reinem Javascript können Sie Folgendes tun:
var buttons = document.getElementsByTagName("button");
var buttonsCount = buttons.length;
for (var i = 0; i < buttonsCount; i += 1) {
buttons[i].onclick = function(e) {
alert(this.id);
};
}
Überprüfen Sie es auf JsFiddle
Sie können es einfach so machen:
<input type="button" id="1234" onclick="showId(this.id)" value="click me to show my id"/>
<script type="text/javascript">
function showId(obj) {
var id=obj;
alert(id);
}
id=obj;
und einfach habenalert(obj);
Entschuldigung, es ist eine späte Antwort, aber es ist sehr schnell, wenn Sie dies tun: -
$(document).ready(function() {
$('button').on('click', function() {
alert (this.id);
});
});
Dadurch wird die ID aller angeklickten Schaltflächen angezeigt.
Wenn Sie nur den Wert der Schaltfläche erhalten möchten, auf die an einer bestimmten Stelle geklickt wurde, legen Sie sie einfach in einen Container wie
<div id = "myButtons"> buttons here </div>
und ändern Sie den Code in: -
$(document).ready(function() {
$('.myButtons button').on('click', function() {
alert (this.id);
});
});
ich hoffe das hilft
Dadurch wird die ID des Elements protokolliert, auf das geklickt wurde: addFields.
<button id="addFields" onclick="addFields()">+</button>
<script>
function addFields(){
console.log(event.toElement.id)
}
</script>