2017-01-28 3 views
0

Я пытаюсь получить имя блока div, когда я его нажимаю. Но я вижу ошибку в консоли:Uncaught TypeError: Не удается прочитать свойство «className» неопределенного jquery

Uncaught TypeError: Cannot read property 'className' of undefined.

Код:

$(window).click(function(element) { 
 
     alert(element.srcElement.className); 
 
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="root"> 
 
      <div class="wrap_question_container"> 
 
       <fieldset class="new_question"><legend>Question</legend> 
 
        <p> 
 
         <label for="question_title">Title: </label> 
 
         <input type="text" placeholder="Question Title" name="question_title" required><br> 
 
        </p> 
 
        <div class="choice_add"></div> 
 
       </fieldset> 
 
      </div><br> 
 
     </div> 
 
     <input type="submit" value="Submit" name="submit_val">

, как я могу это исправить?

ответ

2

От MDN

Event.srcElement is a proprietary alias for the standard Event.target property. It is specific to old versions of Microsoft Internet Explorer.

Меняем element.srcElement.className к element.target.className. Вы также можете использовать this.className, так как jQuery устанавливает this в цель события.

$(window).click(function(element) { 
 
    alert(element.target.className); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="root"> 
 
    <div class="wrap_question_container"> 
 
    <fieldset class="new_question"> 
 
     <legend>Question</legend> 
 
     <p> 
 
     <label for="question_title">Title:</label> 
 
     <input type="text" placeholder="Question Title" name="question_title" required> 
 
     <br> 
 
     </p> 
 
     <div class="choice_add"></div> 
 
    </fieldset> 
 
    </div> 
 
    <br> 
 
</div> 
 
<input type="submit" value="Submit" name="submit_val">

BTW, используя переменную element держать Event аргумент очень запутанным. Обычно его называют либо event, либо e.

+0

большое спасибо! –

0

Вместо того, чтобы пытаться использовать классы и получить класс в клике - используйте атрибуты данных HTML5 и нажав div - получите имя из атрибута data. Конечно, если вы создаете divs на основе класса - вам нужно будет оставить это, а также добавить атрибут данных, но это хороший способ получить информацию о нажатом div.

$(document).ready(function(){ 
 
    $('.root div').click(function(){ 
 
    var name = $(this).attr('data-name'); 
 
    console.log(name); 
 
    }); 
 
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="root"> 
 
      <div data-name="wrap_question_container"> 
 
       <fieldset class="new_question"><legend>Question</legend> 
 
        <p> 
 
         <label for="question_title">Title: </label> 
 
         <input type="text" placeholder="Question Title" name="question_title" required><br> 
 
        </p> 
 
        <div data-name="choice_add"></div> 
 
       </fieldset> 
 
      </div><br> 
 
     </div> 
 
     <input type="submit" value="Submit" name="submit_val">

+0

Хотя это отличный совет, на самом деле он не отвечает на вопрос. Вы полностью поставили вопрос о 'element.srcElement'. – Barmar

+0

@Barmar - обошли стороной, потому что ваш ответ охватывал эту проблему. Я просто пытался предоставить альтернативу существующему методу, который использует лучшую методологию. Иногда лучшим ответом является прекращение использования одного подхода и переход на другое, о котором OP может не знать. Таким образом, исходный вопрос лишний. В этом случае я бы скорее получил имя данных, чем пытаться получить имя класса. Что происходит, когда другой класс добавляется в div? Для лучшего подхода нет необходимости ссылаться на более низкий подход. По моему мнению. Но ваш ответ был очень хорошим. – gavgrif

+0

Если вы хотите предложить альтернативные методы, сделайте это в комментарии. Вы не сможете публиковать полный код, но это нормально. Ответы должны отвечать на вопрос. Никто, кто ищет альтернативы использованию класса, не найдет ваш ответ, потому что заголовок вопроса не предлагает его. – Barmar

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