1. 程式人生 > >需要獲得一組具有相同的ID和name的input的幾種嘗試

需要獲得一組具有相同的ID和name的input的幾種嘗試

如題,由於input是動態生成,起先也可以給id設定成不同的動態名,但是為了儘量不改後臺程式碼。於是嘗試了幾種方法。

需求,有一個【增加】按鈕,使用者每按一次,增加一個input輸入框,要實現判斷input框是否輸入。但由於id一樣,所以網上找了一些方法。


環境,JS:

// 處理載入 輸入框 
var pcInputIndex = 1 ;
function autoLoadInput(par) {				
   	if(par != null && par != "") {
   		var html = "" ;					
		if(par == "pc") {	// 處理批次按鈕 
			var $pc = $("#pc") ;
			html = "<tr id = 'pc_" + pcInputIndex + "' >" ;
				html += "<td>" ;
					html += "<input type='text' name='pcv' id='pcv' class='text' maxlength='200' style='width: 400px;' />" ;
					html += "    <a href=javascript:delAutoLoadInput('pc_',"+pcInputIndex+"); >刪除</a>" ;
				html += "</td>" ;
			html += "</tr>" ;
			 
			$pc.append(html) ;	// 新增元素
			pcInputIndex ++ ;
	   	}
	}
}
html += "<input type='text' name='pcv" + pcInputIndex + "' id='pcv" + pcInputIndex + "' class='text' maxlength='200' style='width: 400px;' />" ;

JSP:

<tr>
	<th>
		批次號:
	</th>
	<td>
		   <input type="button" class="button" onclick="autoLoadInput('pc') ;" value=" + 新增批次" />					
	</td>
</tr>


①最開始,想法是有動態的值pcInputIndex,那麼input的id也可以動態設定。
於是:

html += "<input type='text' name='pcv" + pcInputIndex + "' id='pcv" + pcInputIndex + "' class='text' maxlength='200' style='width: 400px;' />" ;

然後我的判斷方法就是:
function submitForm(n) {
    if(n != "0") {
  	  	var pcn = $("table #pc").find("tr").length ;
  	  	if(pcn == null || pcn <= 0) {
	  	  	$.message("warn","請填寫商品進貨批次資訊 !");		
			return false;
  	  	}
  	  	
  	  	if(pcInputIndex > 1){
  	  		for(var i = 1; i < pcInputIndex; i++){
  	  			var pcvId = 'pcv'+i;
  	  			var pcv = $("#"+pcvId+"").val();
  	  			if($("#"+pcvId+"").length > 0){
		  	  		if(pcv == null || pcv == ""){
		  	  			$("#"+pcvId+"").focus();
				  	  	$.message("warn","請填寫商品進貨批次資訊 !");
						return false;
			  	  	}
  	  			}
  	  		}
  	  	}
  	}
}


由於pcInputIndex只做了++處理,但是刪除按鈕沒有做--處理,所以多了判斷
if($("#"+pcvId+"").length > 0){
但是,後臺程式碼也要隨之改變,我想應該還有不變更的ID的方法。畢竟不想改動太大

// 批次號 
String[] pcvs = null ;
// 判斷是否草稿件 
if(state.equals(ProductQuality.ProductQualityState.Quality_State_1.getCode())) {			
	// 批次號 
	pcvs = request.getParameterValues("pcv") ;
	if(pcvs == null) {
		return Constants.ERROR_VIEW;
	}
    // 此處程式碼省略
}


②於是又找到了這個方法,本來是很好的方法,簡單明瞭,但是不知道為什麼,明明方法可以進,游標都到位了,message卻顯示不出來,不知道是不是和作用域有關,現在的我還是懂的太少,只能記錄下來,以後再解惑了

if(pcInputIndex > 1){
	$('input[id="pcv"]').each(function(){ 
		var pcv=$(this).val();
    	if(pcv == null || pcv == ""){
    		$(this).focus();
    		$.message("warn","請填寫商品進貨批次資訊 !");
    	    return false;
    	}
	});
}


③網上找的也是ByName,我自己嘗試了用ById,發現不行,最後還是這個方法,完美解決

if(pcInputIndex > 1){
	var pcvs = document.getElementsByName("pcv");
	var info = "";
	for (var i = 0; i< pcvs.length; i++) {
		info = pcvs[i].value;
		if (info == null || info == "") {
			pcvs[i].focus();
      	  	$.message("warn","請填寫商品進貨批次資訊 !");
    		return false;
		}
	}
}