2014-12-11 2 views
0

Я пытаюсь создать опцию для добавления дополнительных флажков/текстовых полей на мой сайт. У меня есть кнопка «+», связанная с функцией, которая создает поля, названные в числовом порядке. Я хотел бы добавить прослушиватель событий к флажку, который вызовет функцию, для которой требуется уникальная переменная, на основе имени этого флажка.динамически добавить прослушиватель событий для функции с переменной

<div id="container"> 
    <input name="+" type="button" id="+" onclick="addInput()" value="+" label="+" /> 
</div> 

<p id=demo>eeeeeeee</p> 
var countBox = 1; 

function addInput() { 
    var breakNode = document.createElement("br"); 
    breakNode.className = countBox.toString(); 

    //create checkbox 
    var checkbox = document.createElement("input"); 
    checkbox.type = "checkbox"; 
    checkbox.value = "ProgramSpecificBox" + countBox.toString(); 
    checkbox.name = "ProgramSpecificBox" + countBox.toString(); 
    checkbox.id = "ProgramSpecificBox" + countBox.toString(); 

    //create Amount 
    var Amount = document.createElement("input"); 
    Amount.type = "number"; 
    Amount.value = countBox.toString(); 
    Amount.name = "ItemCostVis"+ countBox.toString(); 
    Amount.id = "ItemCostVis" + countBox.toString(); 

    var container = document.getElementById('container'); 
    container.appendChild(breakNode); 
    container.appendChild(checkbox); 
    container.appendChild(Amount); 

    checkbox.addEventListener("click", function() { 
     testthis(NEED CODE HERE); 
    }) 

    countBox += 1; 
} 

function testthis (text) { 
    document.getElementById("demo").innerHTML = text; 
} 

Что я должен поставить вместо «NEED код здесь», чтобы получить такой же, как идентификатор флажком, который называется функцией?

+0

'this.id' должен работать. [Тест здесь] (http://jsfiddle.net/xmpr6n3e/). Тем не менее, вы можете рассмотреть один прослушиватель для всех флажков, а не связывать новый слушатель для каждого из них. – showdev

+0

Спасибо, что работает. – pppp

+0

Что это значит, что один приемник для всех флажков? – pppp

ответ

0

Вместо:

checkbox.addEventListener("click", function() 
{testthis(NEED CODE HERE); 
}) 

countBox += 1; 
} 

попробовать:

checkbox.addEventListener("click", function(e) 
    {testthis(e); 
    }) 

countBox += 1; 
} 

е параметр должен быть объект события. Объект события имеет свойство currentTarget, которое ссылается на элемент, который инициализировал событие. Таким образом, вы можете позвонить:

function testthis(e) 
{ 
    var myvar = e.currentTarget.id; 
} 

См this fiddle для примера.

0

Вы можете попробовать что-то вроде этого:

checkbox.onclick = function(me){window.alert(me.id)}; 
+0

так что будет с кодом? – pppp

+0

Это не работает. При нажатии любой из этих флажков вы добавите идентификатор последнего добавленного. – pppp

+0

@ user1930608 вы должны использовать рекурсию, чтобы добавить флажки, а не цикл ... – brso05

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