「Etable/formType/file」修訂間的差異
跳至導覽
跳至搜尋
| 第28行: | 第28行: | ||
$this->form->addElement(new XoopsFormHidden('uploadFilePath',$value,0));</pre> | $this->form->addElement(new XoopsFormHidden('uploadFilePath',$value,0));</pre> | ||
| − | ===新增 login.php 中可以後送檔案的 javascript 函式 postFormData(…)=== | + | ====(三)新增 login.php 中可以後送檔案的 javascript 函式 postFormData(…)==== |
| + | <pre>function postFormData(formID,dataSource,divID){ // 以 fetch 發POST請求,可以上傳檔案,等於原來的 sendFormData+postData | ||
| + | var formData = new FormData(); | ||
| + | for(var i=0;i<document.getElementById(formID).elements.length;i++){ | ||
| + | if(document.getElementById(formID).elements[i].type=='checkbox' || document.getElementById(formID).elements[i].type=='radio'){ | ||
| + | if(document.getElementById(formID).elements[i].type=='checkbox'){ // 處理核取方塊,checked回傳值,沒checked回傳空字串 | ||
| + | if(document.getElementById(formID).elements[i].checked==true){formData.append(document.getElementById(formID).elements[i].name,document.getElementById(formID).elements[i].value);} | ||
| + | else{formData.append(document.getElementById(formID).elements[i].name,'');} | ||
| + | }else{ // 處理按鈕,checked回傳值,否則跳過 | ||
| + | if(document.getElementById(formID).elements[i].checked==true){formData.append(document.getElementById(formID).elements[i].name,document.getElementById(formID).elements[i].value);} | ||
| + | } | ||
| + | } | ||
| + | else if(document.getElementById(formID).elements[i].type=='hidden'){formData.append(document.getElementById(formID).elements[i].name,document.getElementById(formID).elements[i].value);} | ||
| + | //新增檔案資料 | ||
| + | else if(document.getElementById(formID).elements[i].type=='file'){formData.append(document.getElementById(formID).elements[i].name,document.getElementById(formID).elements[i].files[0]);} | ||
| + | else{formData.append(document.getElementById(formID).elements[i].name,document.getElementById(formID).elements[i].value);} | ||
| + | } | ||
| + | fetch(dataSource, {method:'POST',body:formData}).then((response)=>{return response.text();}).then((responseText)=>{document.getElementById(divID).innerHTML=responseText;onAjax(a);}); | ||
| + | }</pre> | ||
===修改 etable.php 中的 javascript 函式 checkFormlist(…)=== | ===修改 etable.php 中的 javascript 函式 checkFormlist(…)=== | ||
於 2022年7月6日 (三) 11:47 的修訂
(一)製作表單元素類別
formsome.php 中
class XoopsFormUploadFile extends XoopsFormElement {
function XoopsFormUploadFile($caption, $name){ // 提示、後傳變數名
$this->setCaption($caption);
$this->setName($name);
}
function render(){
return "<input type='file' name='".$this->getName()."' id='".$this->getName()."'".$this->getExtra()." />".$this->getExtra('2');
}
}
class XoopsFormFile extends XoopsFormElementTray{
function XoopsFormFile($caption, $name, $value='', $paths=array('.'=>'當前路徑')){
$this->XoopsFormElementTray($caption,' ');
$pathSelect=new XoopsFormSelect('路徑:',$name.'[path]',$value='');// 產生選單物件並指定預選值
$pathSelect->addOptionArray($paths);
$this->addElement($pathSelect);// 將選單物件放入表單
$fileUpload=new XoopsFormUploadFile('請選檔:', $name.'[fileName]');
$this->addElement($fileUpload);// 將選單物件放入表單
}
}
(二)addElements($i,$value)
加表單元素類型為 file 則
$j=new XoopsFormFile($this->fields[$i]['colalias'],'f['.$this->fields[$i]['as_name'].']['.$this->fields[$i]['colname'].']',str_replace("'",''',str_replace("&",'&',$value)),$this->formType["$lc_name"][1]['paths']);
$this->form->addElement($j,(($this->fields[$i]['formValidate']==0)?'0':'1'));
$this->form->addElement(new XoopsFormHidden('uploadFileField',$lc_name,0));
$this->form->addElement(new XoopsFormHidden('uploadFilePath',$value,0));
(三)新增 login.php 中可以後送檔案的 javascript 函式 postFormData(…)
function postFormData(formID,dataSource,divID){ // 以 fetch 發POST請求,可以上傳檔案,等於原來的 sendFormData+postData
var formData = new FormData();
for(var i=0;i<document.getElementById(formID).elements.length;i++){
if(document.getElementById(formID).elements[i].type=='checkbox' || document.getElementById(formID).elements[i].type=='radio'){
if(document.getElementById(formID).elements[i].type=='checkbox'){ // 處理核取方塊,checked回傳值,沒checked回傳空字串
if(document.getElementById(formID).elements[i].checked==true){formData.append(document.getElementById(formID).elements[i].name,document.getElementById(formID).elements[i].value);}
else{formData.append(document.getElementById(formID).elements[i].name,'');}
}else{ // 處理按鈕,checked回傳值,否則跳過
if(document.getElementById(formID).elements[i].checked==true){formData.append(document.getElementById(formID).elements[i].name,document.getElementById(formID).elements[i].value);}
}
}
else if(document.getElementById(formID).elements[i].type=='hidden'){formData.append(document.getElementById(formID).elements[i].name,document.getElementById(formID).elements[i].value);}
//新增檔案資料
else if(document.getElementById(formID).elements[i].type=='file'){formData.append(document.getElementById(formID).elements[i].name,document.getElementById(formID).elements[i].files[0]);}
else{formData.append(document.getElementById(formID).elements[i].name,document.getElementById(formID).elements[i].value);}
}
fetch(dataSource, {method:'POST',body:formData}).then((response)=>{return response.text();}).then((responseText)=>{document.getElementById(divID).innerHTML=responseText;onAjax(a);});
}