2016-08-17 19 views
0
<!DOCTYPE html> 
<html> 

<head><style> 
body, html{ 
    margin: 0; 
    padding: 0; 
    height: 100%; 
    width: 100%; 
    position: relative; 
} 
.drag_box{ 
    width: 40%; 
    height: 90%; 
    border: black 1px solid; 
    background-color: lightgray; 
    margin-top: 20px; 
} 
.drag_box h2{ 
    text-align: center; 
} 
.content{ 
    width: 80%; 
    overflow: auto; 
    border: solid 2px black; 
    background-color: burlywood; 
} 
</style> 

</head> 
<body> 
<script> 
function allowDrop(ev) { 
    ev.preventDefault(); 
} 

function drag(ev) { 
    ev.dataTransfer.setData("text", ev.target.id); 
} 

function drop(ev) { 
    if(document.getElementById(ev.target.id).id.includes("content")){ 
     return; 
    } 
    else{ 
    ev.preventDefault(); 
    var data = ev.dataTransfer.getData("text"); 
    ev.target.appendChild(document.getElementById(data)); 
    } 
} 
</script> 

私はこの機能をPHPスクリプトで使用するために作成しました。そのため、私の学校のウェブサイトからアナウンスを受け取り、そのページにコンテンツを自動的に作成することができました。ただし、実行すると、コードはまったく実行されません。 scriptタグが 'announcements' divでパレットになったら、コードはコンテンツを実行して作成します。JavaScriptでこの要素を作成できないのはなぜですか?

<script> 
function addContent(id, headline, content){ 

    var announcementContent = document.createElement('div'); 

    announcementContent.setAttribute('class', 'content'); 
    announcementContent.setAttribute('id', 'content'+id); 
    announcementContent.setAttribute('draggable', 'true'); 
    announcementContent.setAttribute('ondragstart', 'drag(event)'); 
    announcementContent.innerHTML = '<h3>'+ headline +'</h3><p>'+ content +'</p>'; 

    document.getElementById('announcements').appendChild(announcementContent); 


} 
    addContent('3','test','testest'); 
</script> 

<div id="announcements" class="drag_box" style="float:left; margin-left: 9%;" ondrop="drop(event)" ondragover="allowDrop(event)"> 
    <h2>Announcements</h2> 
</div> 
<div id="delete_column" class="drag_box" style="float:right; margin-right: 9%;" ondrop="drop(event)" ondragover="allowDrop(event)"> 
    <h2>Trash Box</h2> 
</div> 
</body> 
</html> 
+1

、ここに投稿する前に、JavaScriptコンソールでエラーをチェック。あなた自身でいくつかの基本的なデバッグを行う必要があります。 – Barmar

答えて

2

あなたはannouncements DIV前に関数を呼び出していますDOMに追加されたため、document.getElementById('announcements')は見つかりませんでした。あなたは、undefined.appendChild()を呼び出すことができないというJavascriptコンソールのエラーが発生しているはずです。

の後にのDIVを挿入します。

<div id="announcements" class="drag_box" style="float:left; margin-left: 9%;" ondrop="drop(event)" ondragover="allowDrop(event)"> 
    <h2>Announcements</h2> 
</div> 
<div id="delete_column" class="drag_box" style="float:right; margin-right: 9%;" ondrop="drop(event)" ondragover="allowDrop(event)"> 
    <h2>Trash Box</h2> 
</div> 
<script> 
function addContent(id, headline, content){ 

    var announcementContent = document.createElement('div'); 

    announcementContent.setAttribute('class', 'content'); 
    announcementContent.setAttribute('id', 'content'+id); 
    announcementContent.setAttribute('draggable', 'true'); 
    announcementContent.setAttribute('ondragstart', 'drag(event)'); 
    announcementContent.innerHTML = '<h3>'+ headline +'</h3><p>'+ content +'</p>'; 

    document.getElementById('announcements').appendChild(announcementContent); 


} 
addContent('3','test','testest'); 
</script> 

または文書は関数を呼び出す前にロードされるまで待つ:将来的には

window.onload = function() { 
    addContent('3', 'test', 'testest'); 
} 
+0

ありがとう!すべてがうまくいきました。 – majorpain247991

0
は、スクリプトの実行時にそう announcements要素がまだ存在していない、右 </body>タグの前に、HTMLマークアップの後にスクリプトを移動し

<div id="announcements" class="drag_box" style="float:left; margin-left: 9%;" ondrop="drop(event)" ondragover="allowDrop(event)"> 
    <h2>Announcements</h2> 
</div> 
<div id="delete_column" class="drag_box" style="float:right; margin-right: 9%;" ondrop="drop(event)" ondragover="allowDrop(event)"> 
    <h2>Trash Box</h2> 
</div> 

<script> 
function addContent(id, headline, content){ 

    var announcementContent = document.createElement('div'); 

    announcementContent.setAttribute('class', 'content'); 
    announcementContent.setAttribute('id', 'content'+id); 
    announcementContent.setAttribute('draggable', 'true'); 
    announcementContent.setAttribute('ondragstart', 'drag(event)'); 
    announcementContent.innerHTML = '<h3>'+ headline +'</h3><p>'+ content +'</p>'; 

    document.getElementById('announcements').appendChild(announcementContent); 


} 
    addContent('3','test','testest'); 
</script> 

</body> 
</html> 
+0

ありがとう!それはそれほど簡単ではないと信じられない。 – majorpain247991

+0

問題ありません!その横のチェックマークをクリックしてBarmarの回答を受け入れてください。 –

関連する問題