2016-09-23 4 views
0

私は、ユーザーが名前、姓、および簡単な説明を入力するプロジェクトに取り組んでいます。送信ボタンを押すと、姓と名が新しいdivに転送されます。あなたが最初と最後の名前をクリックすると、新しいdivが反転し、ユーザーが自分自身のために書いた説明が表示されます。ユーザが説明をクリックすると、カードは姓と名字に戻ります。 送信ボタンを押した後、姓と名義を取得できました。しかし、私は最初と最後の名前をつけて説明情報を表示し、最初と最後の名前に戻すのが難しいです。任意の提案をいただければ幸いです。jQueryを使用して新しいdivに連絡先情報を追加する

$(document).ready(function() { 
 
    alert('jQuery activated'); 
 

 
    $('form').submit(function() { 
 
    alert('form submitted'); 
 
    $('#contact_card').append("<div class='person'><h4>" + $('#first_name').val() + " " + $('#last_name').val() + "</h4><p>Click for more details</p></div>"); 
 

 
    return false; 
 

 

 
    }); 
 

 
    $(document).on('click', '.person', function() { 
 
    alert('user clicked'); 
 
    $(this).children().toggle('slow'); 
 

 

 

 

 
    }); 
 

 
});
* { 
 
    font-family: "Tahoma"; 
 
    margin: 0px; 
 
    padding: 0px; 
 
} 
 
#container { 
 
    width: 1000px; 
 
    height: 750px; 
 
    margin: 0px auto; 
 
} 
 
#left, 
 
form { 
 
    display: inline-block; 
 
    max-width: 500px; 
 
} 
 
#left form h3 { 
 
    margin: 0px 0px 13px 0px; 
 
} 
 
.person { 
 
    border: 8px solid red; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<head> 
 
    <title>Advanced jQuery Assignment III: Contact Card</title> 
 

 
</head> 
 

 
<body> 
 
    <div id="container"> 
 
    <div id="left"> 
 
     <form> 
 
     <br>First Name: 
 
     <input class="user_input" type="text" id="first_name"> 
 
     <br> 
 
     <br>Last Name: 
 
     <input class="user_input" type="text" id="last_name"> 
 
     <br> 
 
     <label for="description"></label> 
 
     <textarea name="description" type="text" id="description" cols="50" rows="10">Enter Description</textarea> 
 
     <br> 
 
     <input type="submit" value="Add User"> 
 
     </form> 
 
    </div> 
 
    <!-- end of left --> 
 

 
    <div id="bottom"> 
 
     <div id="contact_card"> 
 

 
     </div> 
 
     <!-- end of contact_card --> 
 
    </div> 
 
    <!-- end of bottom --> 
 
    </div> 
 
    <!-- end of container -->

+0

ページにあなたの説明を追加しませんでした –

+0

http://stackoverflow.com/questionsを実行できるようになります完全なコードです/ 13553671/flip-between-two-divs-when-divsをクリックすると –

答えて

0

だから、隠しpcontact_cardに説明を追加。次に、personクラスをクリックすると、pの子がトグルされます。

$(document).ready(function() { 
 

 
    $('form').submit(function() { 
 
    $('#contact_card').append("<div class='person'><h4>" + $('#first_name').val() + " " + $('#last_name').val() + "</h4><p>Click for more details</p><p hidden>"+$('#description').val()+"</p></div>"); 
 

 
    return false; 
 
    }); 
 

 
    $(document).on('click', '.person', function() { 
 
    $(this).children('p').toggle('slow'); 
 
    }); 
 

 
});
* { 
 
    font-family: "Tahoma"; 
 
    margin: 0px; 
 
    padding: 0px; 
 
} 
 
#container { 
 
    width: 1000px; 
 
    height: 750px; 
 
    margin: 0px auto; 
 
} 
 
#left, 
 
form { 
 
    display: inline-block; 
 
    max-width: 500px; 
 
} 
 
#left form h3 { 
 
    margin: 0px 0px 13px 0px; 
 
} 
 
.person { 
 
    border: 8px solid red; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<head> 
 
    <title>Advanced jQuery Assignment III: Contact Card</title> 
 

 
</head> 
 

 
<body> 
 
    <div id="container"> 
 
    <div id="left"> 
 
     <form> 
 
     <br>First Name: 
 
     <input class="user_input" type="text" id="first_name"> 
 
     <br> 
 
     <br>Last Name: 
 
     <input class="user_input" type="text" id="last_name"> 
 
     <br> 
 
     <label for="description"></label> 
 
     <textarea name="description" type="text" id="description" cols="50" rows="10">Enter Description</textarea> 
 
     <br> 
 
     <input type="submit" value="Add User"> 
 
     </form> 
 
    </div> 
 
    <!-- end of left --> 
 

 
    <div id="bottom"> 
 
     <div id="contact_card"> 
 

 
     </div> 
 
     <!-- end of contact_card --> 
 
    </div> 
 
    <!-- end of bottom --> 
 
    </div> 
 
    <!-- end of container -->

0

私はあなたが以下のコードでこれをやって行くことができる方法を詳細にしました。あなたはこれを行うことについて行くことができる複数の方法があります。私の例では、DOMに要素を追加したり削除したりすることで、記述の名前を入れ替えることにしました。 、1は名前のビューを作成するために、他方は

 // Generates view for name 
     var getNameView = function(user) { 
      return $("<div class='person'><div><h4>" + user.first_name + " " + user.last_name + "</h4><p>Click for more details</p></div></div>") 
     }; 

     // Generates view for description 
     var getDescriptionView = function(user) { 
      return $("<div class='person'><div><h4>" + user.description + " " + "</h4><p>Click to go back</p></div></div>") 
     }; 

次は、我々は、フォームのハンドラは、フィールドのすべての詳細をつかむために提出する変更の説明ビューを作成するには:

まず、私は2つの機能を作成しますそれをオブジェクトとして格納し、次のエントリのフィールドをクリアします。この関数は、要素をページに追加します。

 // Listen for form submit 
     $('form').submit(function() { 

      // Stores details of user being added 
      var user = { 
       first_name: $('#first_name').val(), 
       last_name: $('#last_name').val(), 
       description: $("#description").val() 
      }; 

      // Add user to list of users 
      users.push(user); 

      // Append name view for user 
      $('#contact_card').append(getNameView(user)) 

      // Clear fields 
      $("#first_name").val("") 
      $("#last_name").val("") 
      $("#description").val("") 

      return false 

     }); 

最後に、person要素をクリックすると、名前と説明の間のコンテンツの交換を処理する必要があります。これを行うには、まずクリックされる要素を閉じてから、クラス(この場合は「説明」)に基づいて、その要素に対してどのビューを表示するかを決定します。ここで

 $(document).on('click', '.person', function(){ 

      // Store a reference to the element for the person clicked on 
      var $person = $(this) 

      // Hide the contents of the person element before swapping views 
      $person.children().slideUp('slow', function() { 

       // Determine whether we should show the description. 
       // We'll use a class on the person element to determine this. 
       if ($person.hasClass("description")) { 
        $person.removeClass("description"); 
        $person.html(getNameView(users[$person.index()]).children()) 
        $person.children().slideDown('slow'); 
       } 
       else { 
        $person.addClass("description"); 
        $person.html(getDescriptionView(users[$person.index()]).children()) 
        $person.children().slideDown('slow'); 
       } 
      }); 


     }); 

あなたは

<!DOCTYPE html> 
<html> 
<head> 
<title>Advanced jQuery Assignment III: Contact Card</title> 
<link rel="stylesheet" type="text/css" href="css/style.css"> 
<script src="https://code.jquery.com/jquery-2.2.4.js" integrity="sha256-iT6Q9iMJYuQiMWNd9lDyBUStIq/8PuOW33aOqmvFpqI=" crossorigin="anonymous"></script> 
<script type="text/javascript"> 
    $(document).ready(function(){ 

     // Used to keep track of users being added 
     // stores details of user as object 
     var users = []; 

     // Generates view for name 
     var getNameView = function(user) { 
      return $("<div class='person'><div><h4>" + user.first_name + " " + user.last_name + "</h4><p>Click for more details</p></div></div>") 
     }; 

     // Generates view for description 
     var getDescriptionView = function(user) { 
      return $("<div class='person'><div><h4>" + user.description + " " + "</h4><p>Click to go back</p></div></div>") 
     }; 


     // Listen for form submit 
     $('form').submit(function() { 

      // Stores details of user being added 
      var user = { 
       first_name: $('#first_name').val(), 
       last_name: $('#last_name').val(), 
       description: $("#description").val() 
      }; 

      // Add user to list of users 
      users.push(user); 

      // Append name view for user 
      $('#contact_card').append(getNameView(user)) 

      // Clear fields 
      $("#first_name").val("") 
      $("#last_name").val("") 
      $("#description").val("") 

      return false 

     }); 


     $(document).on('click', '.person', function(){ 

      // Store a reference to the element for the person clicked on 
      var $person = $(this) 

      // Hide the contents of the person element before swapping views 
      $person.children().slideUp('slow', function() { 

       // Determine whether we should show the description. 
       // We'll use a class on the person element to determine this. 
       if ($person.hasClass("description")) { 
        $person.removeClass("description"); 
        $person.html(getNameView(users[$person.index()]).children()) 
        $person.children().slideDown('slow'); 
       } 
       else { 
        $person.addClass("description"); 
        $person.html(getDescriptionView(users[$person.index()]).children()) 
        $person.children().slideDown('slow'); 
       } 
      }); 


     }); 

    }); 

</script> 
<style> 
    * { 
     font-family: "Tahoma"; 
     margin: 0px; 
     padding: 0px; 
    } 

    #container { 
     width: 1000px; 
     height: 750px; 
     margin: 0px auto; 
    } 

    #left, form { 
     display: inline-block; 
     max-width: 500px; 
    } 

    #left form h3 { 
     margin: 0px 0px 13px 0px; 
    } 

    .person { 
     border: 8px solid red; 
     margin: 1rem 0; 
    } 
</style> 
</head> 
<body> 
<div id="container"> 
    <div id ="left"> 
     <form> 
      <br>First Name: 
      <input class="user_input" type="text" id="first_name"> 
      <br> 
      <br>Last Name: 
      <input class="user_input" type="text" id="last_name"> 
      <br> 
      <label for="description"></label> 
      <textarea name="description" type="text" id="description" cols="50" rows="10" placeholder="Enter description"></textarea> 
      <br> 
      <input type="submit" value="Add User"> 
     </form> 
    </div> <!-- end of left --> 

    <div id="bottom"> 
     <div id="contact_card"> 

     </div> <!-- end of contact_card --> 
    </div> <!-- end of bottom --> 
</div> <!-- end of container --> 

関連する問題