AngularJSフォームを作成しようとしています。フォームの1つの部分はBase64をファイルから取り出し、それを私の$scope.user
に保存しています。ただし、ファイルのアップロード入力をクリックしてファイルを選択すると、自分のフォームが送信されますが、これは起こってはいけません。ここでAngularJSフォームは提出されていないときに提出し、理由はわかりません
は私のフォームです:
<form ng-submit="processForm()" name="merchApp" style="position:relative">
<div class="form-section" ui-view>
<div class="row">
<div class="col-sm-12 text-center">
<button href="#" ng-click='docUpload("userId")'>Upload File</button> {{user.uploadIdName}}
<br/>* Accepted file types: .jpg, .png, .gif, .pdf, .doc, .docx
<br/>
(Max file size: 2MB)
<br/>
<input ng-model="user.uploadId" type="hidden" value="{{user.uploadId}}" required>
<br/><br/>
<button type="submit" class="next" ng-disabled="merchApp.$invalid">SUBMIT APPLICATION</button>
</div>
</div>
</div>
</form>
は、ここに私のapp.js
.controller('formController', ['$scope', '$http', '$parse', function($scope, $http, $parse) {
// we will store all of our form data in this object
$scope.user = {};
$scope.docUpload = function() { //default function, to be override if browser supports input type='file'
$scope.data.alert = "Your browser doesn't support HTML5 input type='File'"
}
var fileUploadScope;
var fileSelect = document.createElement('input'); //input it's not displayed in html, I want to trigger it form other elements
fileSelect.type = 'file';
if (fileSelect.disabled) { //check if browser support input type='file' and stop execution of controller
return;
}
var fileUploadScope;
var fileUploadName;
$scope.docUpload = function(x) { //activate function to begin input file on click
switch(x){
case "checkBankLetter":
fileUploadScope = $parse("uploadCheckBankLetter");
fileUploadName = $parse("uploadCheckBankLetterFileName");
break;
case "userId":
fileUploadScope = $parse("uploadId");
fileUploadName = $parse("uploadIdName");
break;
default:
alert ("error");
}
fileSelect.click();
}
fileSelect.onchange = function() { //set callback to action after choosing file
var f = fileSelect.files[0];
var fsize = f.size;
var fileTypes = ['jpg', 'jpeg', 'png', 'doc', 'docx', 'pdf', 'gif'];
if (fsize > 2097152){//file size limit is 2MB
alert ("File size too large. Please select a file 2MB or smaller.");
}
else {// file size is acceptable
if(f){
var extension = f.name.split('.').pop().toLowerCase(), //file extension from input file
isSuccess = fileTypes.indexOf(extension) > -1; //is extension in acceptable types
if (isSuccess) { //yes
var r = new FileReader();
r.fileName = f.name;
if (typeof FileReader !== "undefined"){
r.onloadend = function(e) { //callback after files finish loading
// allow for different scope names for file upload functions
fileUploadScope.assign($scope.user, e.target.result);
fileUploadName.assign($scope.user, r.fileName);
$scope.$apply();
//here you can send data over your server as desired
}
r.readAsDataURL(f); //once defined all callbacks, begin reading the file
}
}
else {
alert("Please select an acceptable file type");
}
}
}
};
// function to process the form
$scope.processForm = function() {
$http({
method : 'POST',
url : 'docusign.php',
data : $scope.user // pass in data as strings
})
.success(function(data) {
console.log(data);
location.replace(data);
});
};
}])
processForm()
だ私は<button href="#" ng-click='docUpload("userId")'>Upload File</button>
をクリックしてファイルを選択して、なぜこれが起こっている私が把握することはできません後に発射されます。
へ
変更このライン
<button href="#" ng-click='docUpload("userId")'>Upload File</button>
あなたがアップロードするファイルを選択し、あなたはそれをクリックするか、選択したファイルから入力してヒットしていますか?あなたがenterを押すと、フォームがデフォルトの提出イベントとしてそれを解釈する可能性がありますか? – jusopi
私はそれをクリックして、私はポップアップウィンドウファイルエクスプローラから "オープン"を打つよ。 – user3183717
入力タイプを「ファイル」に変更しようとしましたか?あなたが「隠し」を使っている理由は何ですか?私がファイルアップロードUIを作ったとき、私はいつも "ファイル"を使ってきました。 – jusopi