【问题标题】:Create a dynamic JQuery to disable a dropdown创建动态 JQuery 以禁用下拉菜单
【发布时间】:2014-06-09 06:01:11
【问题描述】:

我正在使用 Servlet 和 JSP。我有一个 JSP 表单,其中有一个动态生成的下拉列表,所以到目前为止我在下拉列表中有三个选项。

HTML 代码--

<form id='form' method='post' action='/test/'>
<select id="type" name="typeOne">

<optgroup id="first" name="First" label="FirstDiv">
    <option value="value1" id="001">valuee1 count</option>
    <option value="value2" id="002">value2</option>
    <option value="value3" id="003">value3
    </option>
</optgroup>
</select>
</form>

现在我需要使用 jquery 禁用上面下拉列表中的几个选项。下面是我的 jquery,我在其中禁用了 001002 选项,但我在下面的 jquery 中硬编码了 id -

<script>
    $(document).ready(function () {
        $(function () {
            $("#type option[id='001']").prop("disabled", true);
            $("#type option[id='002']").prop("disabled", true);
        });
    });

</script>

下面是我的 servlet,我从中传递了一个列表,该列表将包含我想要在下拉列表中禁用的所有 id。

List<String> storeTest = new ArrayList<String>();
storeTest.add("001");
storeTest.add("002");

req.setAttribute("store", storeTest);

问题陈述:-

现在我的问题是 - 如何在 jquery 中迭代 store 列表并在下拉列表中禁用 001002 选项?

【问题讨论】:

  • 首先,您需要在客户端(即您的 jQuery)获取数据,因为您需要对 servlet 进行另一个 ajax 调用并以可解析格式返回数据,或者您将数据与 main 一起传递页面的某个隐藏部分中的页面并从 jQuery 中读取并处理它
  • OP 已经在我猜的请求属性中传递了商店列表。
  • 是的,它已经在传递值了。我需要知道如何在我的 jsp 列表中使用该值并进一步迭代以创建禁用 jquery 语句

标签: javascript jquery html jsp servlets


【解决方案1】:

Servlet 中准备好你的选择器,然后在 JSP 中注入:

MyServlet.java

List<String> storeTest = new ArrayList<String>();
storeTest.add("001");
storeTest.add("002");
// If you have Java8 : use Lamda list.stream().map(e->'#'+e)
req.setAttribute("store",StringUtils.join(mapForId(storeTest).toArray(),",")); 

this.getServletContext().getRequestDispatcher( "/myPage.jsp" ).forward( req, response );

然后在你的 jsp 中,添加如下表达式:

myPage.jsp

<script type="text/javascript">
//....
jQuery(document).ready(function () {
        jQuery(function () {
            jQuery(<%=request.getAttribute("store") %>).prop("disabled", true);
            
        });
    });

</script>

知道 ma​​pForId 是 Servlet 中的另一种方法:

List<String> mapForId(List l){
  List<String> newArr=new ArrayList<String>();
  for(String attr : l){
      newArr.add("option#"+attr);
  }
  return newArr;
}

【讨论】:

  • 谢谢 عبد النور التومي,回复,我用的是java 6而不是java 8?如何在 Java 6 中做到这一点?
  • 已更新!如果有铸造对象的PB,我希望你能处理。如果 jQuery(&lt;%=request.getAttribute("store") %&gt;) 不起作用,请尝试添加 ' 'jQuery('&lt;%=request.getAttribute("store") %&gt;')
  • 谢谢你 عبد النور التومي :)
  • 我在.join(",")); 上遇到错误我是否必须添加任何 Maven 依赖项或创建任何方法?错误是 - cannot resolve method join()
  • 已解决,mapForId() 方法在 id 选择器前面附加了 option#。谢谢
猜你喜欢
  • 1970-01-01
  • 2012-08-29
  • 1970-01-01
  • 2012-08-11
  • 2017-01-06
  • 2014-11-14
  • 1970-01-01
  • 1970-01-01
  • 2022-01-06
相关资源
最近更新 更多