2013-06-21 45 views
0

我做一個簡單的HTML5 &的Javascript拖放遊戲,由此用戶應在專區內拖動圖像多數民衆贊成定位成空div。結合if語句

拖放工作正常,我已經成功地編寫JavaScript代碼,以提醒當#answer1拖入正確的DIV,#target

然而,當我重複的if語句,它會提醒正確的,但隨後也提醒不正確的,我懷疑是第二個如果陳述後直接運行。

有沒有什麼辦法的報表種類的分離,使得它只能運行的圖像拖的時候,而不是運行所有的if語句?

function allowDrop(ev){ 
    ev.preventDefault(); 
} 

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

function drop(ev){ 
    ev.preventDefault(); 
    var image = ev.dataTransfer.getData("content"); 
    ev.target.appendChild(document.getElementById(image)); 

    if($('#target1').find('#answer1').length == 1) 
    { 
    alert("CORRECT!"); 
    } else { 
    alert("Wrong!"); 
    } 

    if($('#target2').find('#answer2').length == 1) 
    { 
    alert("CORRECT!"); 
    } else { 
    alert("Wrong!"); 
    } 
} 

的jsfiddle對於全網頁:

http://jsfiddle.net/hgDFU/1/

+2

您可以使用'return'而不是alert,或者通知drop()將返回什麼。 'return'會使解析器在執行時離開函數。 –

回答

1

一種選擇是隻檢查的目標是有一個圖像放在它上面。這樣可以更輕鬆地在遊戲中添加或刪除目標,而無需更改drop()中的代碼。

function drop(ev) { 
    ev.preventDefault(); 
    var image = ev.dataTransfer.getData("content"); 
    ev.target.appendChild(document.getElementById(image)); 

    var targetnum = ev.target.id.replace("target", ""); 
    if($('#target' + targetnum).find('#answer' + targetnum).length == 1) 
    { 
     alert("CORRECT!"); 
    } else { 
     alert("Wrong!"); 
    } 
} 
+0

這是完美的!非常感謝。有幾次結束後,將答案放回到指定的起始區域(例如,如果用戶錯誤的話),它會提示「錯誤」是否有任何方法可以避免這種情況發生?或者,如果聲明不正確,可能會將圖像位置重置爲原始位置? 此外,我得到,如果答案的警告框,內錯「創建其他對話防止這個網頁」這是正常的消息? –

+0

要阻止它發出警告「錯誤」,只需將該警報從代碼中取出即可。這也將是你將代碼重置圖像的地方。是的,這個信息是完全正常的。 – jonhopkins

2

由於Ghillied在評論中說,這將是更好的做法:

function drop(ev){ 
    ev.preventDefault(); 
    var image = ev.dataTransfer.getData("content"); 
    ev.target.appendChild(document.getElementById(image)); 

    alert(checkDrop()); 
} 

function checkDrop() { 

    if($('#target1').find('#answer1').length == 1){ 
     return "CORRECT!"; 
    } 
    else if($('#target2').find('#answer2').length == 1) { 
     return "CORRECT!"; 
    } 
    else { 
     return "Wrong!"; 
    } 
}