Jak znaleźć identyfikator klikniętego przycisku?
<button id="1" onClick="reply_click()"></button>
<button id="2" onClick="reply_click()"></button>
<button id="3" onClick="reply_click()"></button>
function reply_click()
{
}
Jak znaleźć identyfikator klikniętego przycisku?
<button id="1" onClick="reply_click()"></button>
<button id="2" onClick="reply_click()"></button>
<button id="3" onClick="reply_click()"></button>
function reply_click()
{
}
Odpowiedzi:
Musisz wysłać identyfikator jako parametry funkcji. Zrób to tak:
<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>
Spowoduje to wysłanie identyfikator this.idjako clicked_idktóre można wykorzystać w swojej funkcji. Zobacz to w akcji tutaj.
event.target.id(dla mnie zarówno Firefox, jak i IE go rzucały), jest to świetne rozwiązanie, które działa we wszystkich trzech głównych przeglądarkach.
Ogólnie rzecz biorąc, łatwiej jest utrzymać porządek, jeśli oddzielisz kod i znaczniki. Zdefiniuj wszystkie elementy, a następnie w sekcji JavaScript określ różne działania, które powinny zostać wykonane na tych elementach.
Gdy wywoływany jest moduł obsługi zdarzeń, jest on wywoływany w kontekście klikniętego elementu. Tak, identyfikator ten będzie odnosić się do elementu DOM, który kliknął. Następnie można uzyskać dostęp do atrybutów elementu za pośrednictwem tego identyfikatora.
Na przykład:
<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>
KORZYSTANIE Z PURE JAVASCRIPT: Wiem, że jest późno, ale może być dla przyszłych osób, które mogą pomóc:
W części HTML:
<button id="1" onClick="reply_click()"></button>
<button id="2" onClick="reply_click()"></button>
<button id="3" onClick="reply_click()"></button>
W kontrolerze JavaScript:
function reply_click()
{
alert(event.srcElement.id);
}
W ten sposób nie musimy wiązać „id” elementu podczas wywoływania funkcji javascript.
thisjako parametr onClick(właściwie nie używając onClick, ale onChange, czy to może być problem?). Sprawdziłem też trochę i wydaje się, że istnieje wiele zamieszania wokół tej eventzmiennej - czy jest to parametr „niejawny”, czy też musi to być wyraźnie określone jako argument (tzn. function reply_click(event)Które widziałem również w niektóre lokalizacje)? Czy jest dostępny tylko przy przypisywaniu nasłuchiwania zdarzeń przez addEventListener...? Bawiłem się, ale nie mogłem go uruchomić.
(Myślę, że idatrybut musi zaczynać się od litery. Może być niepoprawny).
Możesz udać się na delegację wydarzenia ...
<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);
}
}
... ale to wymaga relatywnej wygody w przypadku zwariowanego modelu eventu.
eargument jest generowany automatycznie. Jeśli nie jest, musimy mieć do czynienia z IE6-8, który zamiast tego zapewnia ten użyteczny obiekt za pośrednictwem window.event.
generalnie zaleca się unikanie wbudowanego JavaScript, ale rzadko istnieje przykład jak to zrobić.
Oto mój sposób dołączania zdarzeń do przycisków.
Nie jestem do końca zadowolony, jak długo zalecana metoda jest porównywana z prostym onClickatrybutem.
<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>
Możesz uruchomić to zanim dokument będzie gotowy, kliknięcie przycisków będzie działać, ponieważ dołączamy zdarzenie do dokumentu.
Oto jsfiddle
Z jakiegoś dziwnego powodu insertHTMLfunkcja w nim nie działa, chociaż działa we wszystkich moich przeglądarkach.
Zawsze można wymienić insertHTMLze document.writejeśli nie przeszkadza, że to wady
<script>
document.write('<button class="click-me" id="btn1">Button 1</button>');
</script>
Źródła:
Jeśli nie chcesz przekazywać żadnych argumentów do funkcji onclick, po prostu użyj, event.targetaby uzyskać kliknięty element:
<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);
}
W czystym javascript możesz wykonać następujące czynności:
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);
};
}
sprawdź na JsFiddle
Możesz to po prostu zrobić w ten sposób:
<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;i po prostu miećalert(obj);
Przepraszam, że to późna odpowiedź, ale jest naprawdę szybka, jeśli to zrobisz: -
$(document).ready(function() {
$('button').on('click', function() {
alert (this.id);
});
});
Pobiera identyfikator dowolnego klikniętego przycisku.
Jeśli chcesz tylko kliknąć wartość przycisku w określonym miejscu, po prostu umieść je w pojemniku jak
<div id = "myButtons"> buttons here </div>
i zmień kod na: -
$(document).ready(function() {
$('.myButtons button').on('click', function() {
alert (this.id);
});
});
mam nadzieję, że to pomoże
Spowoduje to zarejestrowanie identyfikatora klikniętego elementu: addFields.
<button id="addFields" onclick="addFields()">+</button>
<script>
function addFields(){
console.log(event.toElement.id)
}
</script>