2012-07-12 14 views
0

驗證爲圖像,我有以下的jQuery啓動Javascript:限制多少動態表單字段的顯示和使用javascript

<form> 
    <input type="file"> 
</form> 

jQuery(function($) { 

    $('form').delegate('input[type=file]', 'change', function() { 
    var form = $(this).closest('form'); 
    form.append('<input type="file">'); 
    }); 

}); 

它會動態地添加一個文件上傳字段作爲用戶添加他們要上傳的文件。我怎樣才能限制它只有圖像,並添加5個圖像後停止添加新的字段?

我試圖從具有大量的現場,我確認爲圖像像這樣進行切換:

var valid_extensions = /(.gif|.jpg|.jpeg|.png)$/i; 
function CheckExtension(fld){ 
    if (valid_extensions.test(fld.value)) return true; 
    alert('only gif, png or jpg formats are allowed!'); 
    fld.select(); 
    fld.value=""; 
    fld.focus(); 
    return false; 
} 

<input type="file" onChange="return CheckExtension(this);"> 

回答

1

瞭解你的目標,你應該重寫你的函數:

var checkExtension; 
var valid_extensions = /(.gif|.jpg|.jpeg|.png)$/i; 
var limit = 5; // define the limit of rows here 
var i = 0; 
$('form').delegate("input[type=file]", "change", function() { 
    if (i < limit && checkExtension(this)) { 
     $('form').append($("<input>").attr({type: "file"})); 
    } 
    i++; 
}); 
checkExtension = function (fld) { 
    if (valid_extensions.test(fld.value)) return true; 
    alert('only gif, png or jpg formats are allowed!'); 
    fld.select(); 
    fld.value=""; 
    fld.focus(); 
    return false; 
} 
+0

我是用'script'標籤包裝的,還是用完整''?我試了兩個,它只驗證一個圖像,但現在它不加載下一個文件域 – Keezy 2012-07-12 02:25:38

+0

我不得不改變'$('form')。append($(「」).attr({type:file})) ;'to'$('form')。append($(''));' – Keezy 2012-07-12 03:22:05

+0

感謝您的幫助@Austin – Keezy 2012-07-12 03:22:45

0

您可以使用HTML5的accept屬性來指定MIMETYPES你會接受。

對於你的極限,一個簡單的遞增整數,三元應該處理它,就像這樣:

var i = 0; 
$('form').delegate('input[type=file]', 'change', function() { 
    var form = $(this).closest('form'); 
    i < 5 ? form.append('<input type="file">') : ""; 
    i++; 
}); 

如果要使用JavaScript,谷歌搜索返回此堆棧溢出的答案: Preview an image before it is uploaded

+0

感謝,限制部分工作很好,但'接受'是不完全跨瀏覽器兼容的,這就是爲什麼我沒有去我的先前的方法。 – Keezy 2012-07-12 01:31:00

+0

對,那麼我發佈的答案應該對你最有用。 – Austin 2012-07-12 01:34:31

+0

我上面的'CheckExtension'函數在所有瀏覽器(我迄今爲止測試過的)中都很適用,我怎樣才能將它與新的JavaScript代碼結合起來? – Keezy 2012-07-12 01:44:42

0

隨着@Austin的幫助下,這裏是最後的碼T帽子爲我工作。它會動態創建一個文件輸入字段並僅接受圖像。我仍在測試,但是這個應該在支持js的所有瀏覽器中工作。

<form> 
<input type="file"> 

<script> 
jQuery(function($) { 

    var checkExtension; 
    var valid_extensions = /(.gif|.jpg|.jpeg|.png)$/i; 
    var limit = 5; // define the limit of rows here 
    var i = 1; 
    $('form').delegate("input[type=file]", "change", function() { 
     if (i < limit && checkExtension(this)) { 
      $('form').append($('<input type="file">')); 
     } 
     i++; 
    }); 
    checkExtension = function (fld) { 
     if (valid_extensions.test(fld.value)) return true; 
     alert('only gif, png or jpg formats are allowed!'); 
     fld.select(); 
     fld.value=""; 
     fld.focus(); 
     return false; 
    } 

}); 
</script> 
</form> 
+0

如果有人看到任何可能的問題,請讓我知道,因爲我總是樂於接受建議和改進 – Keezy 2012-07-12 03:24:59

相關問題