Comment trouver l'identifiant du bouton sur lequel on clique?
<button id="1" onClick="reply_click()"></button>
<button id="2" onClick="reply_click()"></button>
<button id="3" onClick="reply_click()"></button>
function reply_click()
{
}
Comment trouver l'identifiant du bouton sur lequel on clique?
<button id="1" onClick="reply_click()"></button>
<button id="2" onClick="reply_click()"></button>
<button id="3" onClick="reply_click()"></button>
function reply_click()
{
}
Réponses:
Vous devez envoyer l'ID comme paramètres de fonction. Fais-le comme ça:
<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>
Cela enverra l'ID this.id
que clicked_id
vous pouvez utiliser dans votre fonction. Voyez-le en action ici.
event.target.id
(pour moi, Firefox et IE la lançaient), c'est une excellente solution qui fonctionne dans les trois principaux navigateurs.
En général, les choses sont plus faciles à organiser si vous séparez votre code et votre balisage. Définissez tous vos éléments, puis dans votre section JavaScript, définissez les différentes actions à effectuer sur ces éléments.
Lorsqu'un gestionnaire d'événements est appelé, il est appelé dans le contexte de l'élément sur lequel vous avez cliqué. Ainsi, l'identifiant cela fera référence à l'élément DOM sur lequel vous avez cliqué. Vous pouvez ensuite accéder aux attributs de l'élément via cet identifiant.
Par exemple:
<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>
UTILISATION DE PURE JAVASCRIPT: Je sais qu'il est tard mais peut être utile pour les futures personnes:
Dans la partie HTML:
<button id="1" onClick="reply_click()"></button>
<button id="2" onClick="reply_click()"></button>
<button id="3" onClick="reply_click()"></button>
Dans le contrôleur Javascipt:
function reply_click()
{
alert(event.srcElement.id);
}
De cette façon, nous n'avons pas à lier l'id de l'élément au moment d'appeler la fonction javascript.
this
comme paramètre dans onClick
(en fait, n'utilisant pas onClick mais onChange, est-ce peut-être le problème?). J'ai également vérifié un peu et il semble y avoir beaucoup de confusion à propos de cette event
variable - est-ce un paramètre "implicite" ou doit-il être déclaré explicitement comme argument (c'est function reply_click(event)
-à- dire que j'ai également vu dans certains endroits)? Est-il uniquement disponible lors de l'affectation de l'écouteur d'événements via addEventListener
...? J'ai joué, mais je n'ai pas pu le faire fonctionner.
(Je pense que l' id
attribut doit commencer par une lettre. Cela pourrait être faux.)
Vous pouvez opter pour une délégation d'événement ...
<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);
}
}
... mais cela vous oblige à être relativement à l'aise avec le modèle d'événement loufoque.
e
argument est généré automatiquement. Si ce n'est pas le cas, alors nous devons traiter avec IE6-8, qui fournit à la place cet objet utile via window.event
.
il est généralement recommandé d'éviter JavaScript en ligne, mais il existe rarement un exemple de la façon de le faire.
Voici ma façon d'attacher des événements aux boutons.
Je ne suis pas entièrement satisfait de combien de temps la méthode recommandée est comparée à un simple onClick
attribut.
<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>
Vous pouvez l'exécuter avant que le document ne soit prêt, en cliquant sur les boutons, cela fonctionnera car nous attachons l'événement au document.
Voici un jsfiddle
Pour une raison étrange, la insertHTML
fonction ne fonctionne pas, même si elle fonctionne dans tous mes navigateurs.
Vous pouvez toujours remplacer insertHTML
par document.write
si cela ne vous dérange pas ses inconvénients
<script>
document.write('<button class="click-me" id="btn1">Button 1</button>');
</script>
Sources:
Si vous ne voulez pas passer d'arguments à la fonction onclick, utilisez simplement event.target
pour obtenir l'élément cliqué:
<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);
}
Avec du javascript pur, vous pouvez effectuer les opérations suivantes:
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);
};
}
vérifier sur JsFiddle
Vous pouvez simplement le faire de cette façon:
<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;
et avoir justealert(obj);
Désolé c'est une réponse tardive mais c'est vraiment rapide si vous faites ceci: -
$(document).ready(function() {
$('button').on('click', function() {
alert (this.id);
});
});
Cela obtient l'ID de n'importe quel bouton cliqué.
Si vous voulez simplement obtenir la valeur du bouton cliqué à un certain endroit, mettez-les simplement dans un conteneur comme
<div id = "myButtons"> buttons here </div>
et changez le code en: -
$(document).ready(function() {
$('.myButtons button').on('click', function() {
alert (this.id);
});
});
J'espère que ça aide
Cela enregistrera l'identifiant de l'élément sur lequel vous avez cliqué: addFields.
<button id="addFields" onclick="addFields()">+</button>
<script>
function addFields(){
console.log(event.toElement.id)
}
</script>