2016-05-26 3 views
0

Я просматривал вокруг Stack Overflow в течение нескольких часов и видел похожие вопросы, но ни один из поставляемых решений не является тем, что я ищу, или просто дон Не работай.Javascript - Как получить идентификатор кнопки, нажатой

Так что я пытаюсь получить идентификатор кнопки, которая находится под определенным div, используя только Javascript, и не использует Javascript внутри HTML-кода.

Мой HTML код выглядит следующим образом:

  <div id="constants" class="hidden"> 
      <fieldset> 
       <legend>Gas</legend> 
       <div> 
        <div class="daily_charge"> 
         <p>Daily charge: <span id="gasDaily"></span></p> 
         <button id="gasDaily_Edit">Edit</button> 
        </div> 
        <div class="rate_charge"> 
         <p>Gas rate: <span id="gasRate"></span></p> 
         <button id="gasRate_Edit">Edit</button> 
        </div> 
       </div> 
      </fieldset> 
      <fieldset> 
       <legend>Elec</legend> 
       <div> 
        <div class="daily_charge"> 
         <p>Daily charge: <span id="elecDaily"></span></p> 
         <button id="elecDaily_Edit">Edit</button> 
        </div> 
        <div class="rate_charge"> 
         <p>Elec rate: <span id="elecRate"></span></p> 
         <button id="elecRate_Edit">Edit</button> 
        </div> 
       </div> 
      </fieldset>       
      <fieldset> 
       <legend>Water</legend> 
       <div> 
        <div class="daily_charge"> 
         <p>Daily charge: <span id="waterInDaily"></span></p> 
         <button id="waterInDaily_Edit">Edit</button> 
        </div> 
        <div class="rate_charge"> 
         <p>Water rate: <span id="waterInRate"></span></p> 
         <button id="waterInRate_Edit">Edit</button> 
        </div> 
       </div> 
      </fieldset> 
     </div> 

и в JavaScript, я пытался использовать неудачно является:

var constantsDiv = document.getElementById("constants"); 
var constants_button = constantsDiv.getElementsByTagName("button"); 
var button_count = constants_button.length; 

for (var i = 0; i <= button_count; i += 1) { 
    constants_button[i].onclick = function (e) {  
     alert(this.id); 
    }; 
}; 

Для начала я не уверен, поставив его в for loop полностью верный путь, но я получаю «Невозможно установить свойство« onclick »неопределенной или нулевой ссылки» в любом случае.

Любые идеи?

Благодаря

+2

Измените '<=' на '<'. Массивы/списки всегда основаны на 0. Кроме того, где/когда/как выполняется этот код? Выполняется ли это до того, как элементы существуют случайно? –

+0

Можете ли вы рассказать подробнее? –

+0

Вы разместили код при загрузке окна? https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onload –

ответ

2

Ваше for() заявление будет врезаться в последнем элементе. Изменение удаления = знака в состоянии:

for (var i = 0; i < button_count; i += 1) { 
===================^ 
+0

Этот ответ кажется сработавшим. – Gadget

+0

Несмотря на сбой, обработчики, связанные в предыдущих итерациях, должны работать нормально. Я считаю, что код выполняется до того, как будут существовать элементы. –

+0

Вы правы @FelixKling, но я думаю, что избежать ошибок в консоли javascript может помочь его отладить. Может быть, проблема DOM не готова. Пусть OP объяснит, и мы увидим :) Спасибо –

-1

Попробуйте один сигнал ($ (это) .id)

+1

Что такое '' '' '? –

+0

Пример для худших практик) –

0

Попробуйте это,

document.getElementById ("# ID"). значение

+0

Здесь нет элемента с идентификатором 'id', и почему« значение »должно быть доступно, когда OP хочет идентификатор? –

+0

И как этот ответ может получить 2 (!) Upvotes O_o –

0

Вы можете использовать: e.target.id

for (var i = 0; i < button_count; i += 1) { 
    constants_button[i].onclick = function (e) {  
     alert(e.target.id); 
    }; 
}; 
+0

Почему это лучше, чем 'this.id'? Или иначе: Почему 'this.id' не работает? –

+0

@FelixKling При 'деле делегировании' 'this' и' target' могут быть разными. –

+0

Для тех, кому еще нужно поддерживать IE8 (и их несколько), 'var target = e.target || e.srcElement; ' –

0

Вы можете попробовать он с этим:

e.target.getAttribute("id") 

Где e переменная в функции для обработки события.

+0

Что случилось с 'this.id'? –

+0

В случае 'this' относится к собственному объекту функции, а не к целевому элементу HTML (или, я думаю, так ...) – dlopez

+0

Это неверно. 'this' ** never ** относится к самой функции, если только ** явно не установлен **. 'this' относится к элементу DOM, к которому привязан обработчик. –

0

Добавить функцию, создать элемент данных щелкните по кнопке щелкнули (с классом), а затем найти данные и ее значение ...

$(".btnToClick").on("click", function { 
    $(this).data('click', true); 
}) 

и

$(".btnToClick [data-click=true]").val(); 

я написал с JQuery

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