開発中、国、都市、町などの選択など、メニューのカスケード操作に遭遇することがよくあります。国を選択すると、次のメニューにその国の都市がリストされます。都市を選択すると、次のメニューに対応する町がリストされます。 この記事では主にドロップダウン メニューのカスケード操作について詳しく紹介し、Ajax とバックグラウンドの間でデータを対話的に送信するためのツール クラスを共有します。興味のある方は参考にしていただければ幸いです。
このメニューのカスケード操作を解決するには2つの方法があります:
①jsを使用して実装し、ページで使用されているカスケードデータをjsに入れ、ページが読み込まれるときに、対応する選択範囲でjsを通じて表示します。この方法には多くの解決策がありますが、最も直感的な方法は、人によって考え方が異なるため、ここでは詳しく説明しません。
②ajaxを使用して非同期かつ動的にロードし、対応するselectに表示するこの方法は非常に便利なので、開発での使用をお勧めします。
開発中の小さな例を見てみましょう:
JSP 短いページ:
<p class="form-group"> <label class="col-sm-2 control-label">设备类别</label> <p class="col-sm-4"> <select class="basic-single" name="codeCategory" onchange="showCodeSubCate()" id="codeCategory" style="width: 100%"> </select> </p> <label class="col-sm-2 control-label">设备子类</label> <p class="col-sm-4"> <select class="basic-single" name="codeSubCategory" id="codeSubCate" disabled="disabled" style="width: 100%"> <option value="">--请选择--</option> </select> </p> </p>
このページには、デバイス分類とデバイス サブクラスという 2 つのオプションが含まれており、デバイス分類は 1 つのレベル メニューです。デバイス サブカテゴリは 2 次メニューであり、デバイス サブカテゴリの表示内容はデバイスの分類によって決まります。
Ajax コード スニペットを見てみましょう:
function addCodeCategory(){ $.ajax({ url: "<%=request.getContextPath()%>/facilitydict/showCodeCategory", async: false, //请求是否异步,默认为异步,这也是ajax重要特性 type: "GET", //请求方式 success: function(result) { result = $.parseJSON(result); var data = result.data; var codeCates = data.split(","); str ='<option value="6801">--请选择--</option>'; for(x in codeCates){ str+='<option value="'+codeCates[x]+'">'+codeCates[x]+'</option>'; } $("#codeCategory").html(str); } }); } function showCodeSubCate(){ $("#codeSubCate").prop("disabled","");//将设备子类的select解除锁定 var target = $("#codeCategory option:selected").text(); $.ajax({ url: "<%=request.getContextPath()%>/facilitydict/showCodeSubCategory", data : {codeCategory:target}, async: false, //请求是否异步,默认为异步,这也是ajax重要特性 type: "GET", //请求方式 success: function(result) { result = $.parseJSON(result); var data = result.data; var codeCates = data.split(","); var str=""; for(x in codeCates){ str+='<option value="'+codeCates[x]+'">'+codeCates[x]+'</option>'; } $("#codeSubCate").html(str); } }); }
デバイス カテゴリ セレクターのコンテンツが変更されると、showCodeSubCate 関数がトリガーされてデータを取得するためにバックグラウンドを要求することは難しくありません。 、要求されたデータが追加され、デバイスのサブクラスに対応する選択に進みます。バックグラウンド コードの実装は次のとおりです (コントローラー メソッドのみが掲載されています):
@RequestMapping("/showCodeCategory") @ResponseBody public Result<String> searchCodeCategory() { Result<String> rs = new Result<>(); List<String> codeCategorys = facilityDictService.searchCodeCategory(); String codeCate = StringUtil.collectionToCommaDelimitedString(codeCategorys); rs.setData(codeCate); return rs; } @RequestMapping("/showCodeSubCategory") @ResponseBody public Result<String> searchCodeSubCategory(HttpServletRequest request) { String codeCategory = request.getParameter("codeCategory"); Result<String> rs = new Result<>(); List<String> codeSubCategorys = facilityDictService.searchCodeSubCategory(codeCategory); String codeCate = StringUtil.collectionToCommaDelimitedString(codeSubCategorys); rs.setData(codeCate); return rs; }
これら 2 つのメソッドは、それぞれ上記の 2 つの ajax リクエストに対応しています。紹介する価値があるのは、バックグラウンドによって返されるデータです。戻り値のタイプは Result< String> で、戻り値のタイプはツール クラスです。具体的な実装は私のブログで参照できます。リンクは次のとおりです。 http://www.cnblogs.com/blog411032/p/5799669.html
ajax はバックグラウンドと対話してデータを送信します。 ツール クラス
public class Result<T> implements Serializable { private static final long serialVersionUID = 3637122497350396679L; private boolean success; private T data; private String msg; public Result() { } public Result(boolean success) { this.success = success; } public boolean isSuccess() { return success; } public void setSuccess(boolean success) { this.success = success; } public T getData() { return data; } public void setData(T data) { this.data = data; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public Result(boolean success, String msg) { super(); this.success = success; this.msg = msg; } public Result(boolean success, T data) { super(); this.success = success; this.data = data; } }
このクラスは、フロントエンドとバックエンドの対話に非常に便利です。
以下は、フロントエンドとバックエンドの ajax 対話です。バックエンド:
フロントエンド Ajax コード:
$.ajax({ url: "<%=request.getContextPath()%>/supp/deleteSupp", data : {supplierId:supplierId}, async: false, //请求是否异步,默认为异步,这也是ajax重要特性 type: "GET", //请求方式 success: function(data) { var rs = eval('('+data+')'); flag = rs.success; if(flag){ alert("删除成功!"); } } });
以下はバックグラウンド Java コードです:
@RequestMapping("/deleteSupp") @ResponseBody public Result<String> deleteSupplier(HttpServletRequest request){ Result<String> rs = new Result<>(); String supplierId = request.getParameter("supplierId"); supplierService.deleteSupplierById(supplierId); rs.setSuccess(true); return rs; }
関連する推奨事項:
Pure CドロップのSS実装- ダウン メニュー メソッドのチュートリアル
ドロップダウン メニュー メソッド共有の jQuery 実装
ドロップダウン メニュー アコーディオン効果共有の jQuery 実装
以上がajax ドロップダウン メニューのカスケード操作の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。