2014-11-03 74 views
-1

我試着讓工作像谷歌一個小腳本添加更多的文件,但我得到一個錯誤,如:功能是沒有定義的JavaScript

ReferenceError: addFile is not defined 

使用腳本IM是:

的Javascript

function addElement(parentId, elementTag, elementId, html) { 
    // Adds an element to the document 
    var p = document.getElementById(parentId); 
    var newElement = document.createElement(elementTag); 
    newElement.setAttribute('id', elementId); 
    newElement.innerHTML = html; 
    p.appendChild(newElement); 
} 

function removeElement(elementId) { 
    // Removes an element from the document 
    var element = document.getElementById(elementId); 
    element.parentNode.removeChild(element); 
} 


var fileId = 0; // used by the addFile() function to keep track of IDs 
function addFile() { 
    fileId++; // increment fileId to get a unique ID for the new element 
    var html = '<input type="file" name="uploaded_files[]" />' + 
       '<a href="" onclick="javascript:removeElement('file-' + fileId + ''); return false;">Remove</a>'; 
    addElement('files', 'p', 'file-' + fileId, html); 
} 

HTML:

<form enctype="multipart/form-data" action="" method="post"> 
    <p>Upload file(s)</p> 
    <div id="files"> 
     <p><input type="file" name="uploaded_file[]" /></p> 
    </div> 
    <p><input type="button" value="Add File" onclick="addFile();" /></p> 
</form> 

的jsfiddle例如:

http://jsfiddle.net/neocastelli/qy7xfheb/

有沒有辦法知道,爲什麼沒有定義addFile?

+1

你有一個語法錯誤,這是不是很奇怪,因爲您在Javascript連接字符串建立與事件處理HTML,出現這種情況那麼容易,當你不遵循最佳實踐。請注意,瀏覽器的控制檯正好指向該錯誤。 – 2014-11-03 15:13:04

回答

1

您在轉義字符串時犯了錯誤。

var html = '<input type="file" name="uploaded_files[]" /> ' + 
      '<a href="" onclick="javascript:removeElement('file-' + fileId + ''); return false;">Remove</a>'; 

必須是:

var html = '<input type="file" name="uploaded_files[]" /> ' + 
      '<a href="" onclick="javascript:removeElement("file-' + fileId + '"); return false;">Remove</a>'; 

而且功能不是全局。你要做的:

window.addFile = function() { 

See the updated Fiddle

+1

這還不夠。您還必須在DOM準備就緒或加載完成後將此JavaScript放在頭標記中。 – 2014-11-03 15:15:13

+0

嗨@Andreas,感謝提示!,我現在看到,刪除它不會刪除選定的elementId,並且它會返回一個錯誤:Uncaught SyntaxError:意外的標記} – Dario 2014-11-04 08:14:58