2017-01-28 2 views
0

divブロックの名前をクリックしようとしています。しかし、私は、コンソールにエラーが表示されます。Uncaught TypeError:未定義のjqueryのプロパティ 'className'を読み取ることができません

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">

は、どのように私はこの問題を解決することができますか? MDN

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

から

答えて

2

のでelement.target.classNameelement.srcElement.classNameを変更します。 jQueryはイベントターゲットにthisを設定するので、this.classNameも使用できます。

$(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">

ところで、Event引数を保持するためにelementという名前の変数を使用することは非常に紛らわしいです。 eventまたはeのいずれかの名前を付けるのが一般的です。

+0

どうもありがとうございました! –

0

クラスを使用してクリックを使用するHTML5のデータ属性でクラスを取得し、divをクリックしてデータ属性から名前を取得しようとするのではなく、もちろん、クラスに基づいてdivをスタイリングしている場合は、データ属性を追加するだけでなく、そのままにしておく必要がありますが、クリックした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 - 回答がその問題をカバーしていたためです。私は単に、より良い方法論を使用する既存の方法に代わるものを提供しようとしていました。時には、最良の答えは、1つのアプローチの使用をやめ、OPが知り得ない別のアプローチに切り替えることです。それによって元の質問が冗長になります。この場合、クラス名を取得しようとするよりもむしろデータ名を取得することになります。別のクラスがdivに追加されるとどうなりますか?より良いアプローチは、より貧しいアプローチを参照する必要はありません。私の考えでは。しかし、あなたの答えはとても良かったです。 – gavgrif

+0

別の方法を提案する場合は、コメントで行います。完全なコードを投稿することはできませんが、それは問題ありません。答えはその質問に答えるはずです。質問のタイトルはそれを示唆していないので、クラスを使用する代わりにあなたの答えを見つけることを探している人は誰もいません。 – Barmar

関連する問題