2016-11-07 2 views
-1

У меня есть атрибут HTML onclick, и я пытаюсь динамически добавлять к нему дополнительные свойства при нажатии клавиши без удаления существующего свойства. Другими словами ....Добавление дополнительного контента (+ =) в атрибут HTML

Скажем, у меня есть

<button onclick="doThis(1)"> 

Каждый раз, когда кнопка нажата, я хотел бы добавить, что так в первый раз, когда нажимается кнопка, которую вы хотите получить

<button onclick="doThis(1), doThis(2)"> 

третий раз:

<button onclick="doThis(1), doThis(2), doThis(3)"> 

т.д.

Есть ли какой-нибудь способ сделать

document.getElementById("mybtn").onclick += doThis($n{index}; 

или мне просто нужно создать строку самостоятельно?

Я не могу понять это, не создавая большую строку, чтобы добавить в setAttribute. Когда я пытаюсь изменение кода JS выше I врезаться браузер :(

Thx для взглянуть !!

+1

Возможный дубликат [Как добавить oncli ck в элемент html динамически с помощью javascript] (http://stackoverflow.com/questions/22604401/how-to-add-onclick-to-a-html-element-dynamically-using-javascript) – Liam

+1

Это сделало бы много больше смысла иметь только один обработчик onclick, который заботится о логике. Просто иметь массив, в который вы добавляете функцию для запуска с заданным аргументом. Затем ваш обработчик может просто перебрать массив и выполнить их в правильном порядке. – GillesC

+0

@ Liam Нет, это не одно и то же. – Fedreg

ответ

3

Хорошо, я действительно не нравится этот ответ, но это делать то, что вы ищете для. Мне не нравится, потому что это зависит от настройки обработчиков событий как свойства объектов DOM, а не с помощью модели событий W3C DOM Level 2. Но, кроме этого, здесь вы идете ...

window.doThisCounter = 1; 
 
var eventList = ""; 
 

 
function doThis(){ 
 
     console.log(eventList); 
 
     window.doThisCounter++; 
 
     eventList += "doThis(" + window.doThisCounter + ");"; 
 
     btnGo.setAttribute("onclick", eventList); 
 
} 
 

 

 
// This will execute once, when page is ready: 
 
window.addEventListener("DOMContentLoaded", function(){ 
 
    
 
    var btn = document.getElementById("btnGo"); 
 

 
    (function(counter){ 
 
    eventList = "doThis(1);"; 
 
    btnGo.setAttribute("onclick", eventList); 
 
    }(window.doThisCounter)); 
 
    
 
});
<button id="btnGo">Click Me!</button>

+0

Это не будет делать то, что происходит после OP. обработчик будет иметь то же значение для 'doThisCounter', что означает, что' doThis' запускает аргумент 'counter', будет одинаковым для всех. – GillesC

+0

@ GillesC По-видимому, вы не запускали код. Аргумент увеличивается с каждой новой обработкой обработчика событий - точно так же, как показал OP. Закрытие «счетчика» отсутствует. –

+0

Скотт, спасибо за ясный ответ, но я не думаю, что правильно объясняю себя. Это было бы похоже на то, что каждый раз, когда кто-то нажимал «Click Me», запускался второй счетчик.Такая же функциональность, тот же код, одно и то же имя, но независимый вызов той же функции (в то время как оригинал существует). Надеюсь, это имеет смысл. – Fedreg

Смежные вопросы