Javascript Jquery onchange事件未触发

Javascript Jquery onchange事件未触发,javascript,jquery,html,struts2,jquery-selectors,Javascript,Jquery,Html,Struts2,Jquery Selectors,我陷入了这样一种情况:我有一个Struts2表单,表单上有一个select标记,当它被更改时会触发一个事件,我不明白为什么onchange函数没有触发,但奇怪的是onchange触发器事件在另一个例子中起作用。我在这里感到困惑 不工作: <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib prefix="s

我陷入了这样一种情况:我有一个Struts2表单,表单上有一个select标记,当它被更改时会触发一个事件,我不明白为什么
onchange
函数没有触发,但奇怪的是
onchange
触发器事件在另一个例子中起作用。我在这里感到困惑

不工作:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
                      "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>New Order</title>
<script src="js/jquery-1.11.1.min.js"></script>
<script type='text/javascript'>
    $(function(){
        $('#company').change(function() {
            var selected = $('#company').val();
            alert(selected);
        });
    });

</script>
</head>
<body>
    <s:form action="NewOrder">
        <s:select headerKey="-1" headerValue="Select Company" name="company"
            label="Select Company" list="{'companies','industries'}" />
    Select Item:
    <select id="item"></select>
        <s:select id="ordertype" name="purchaseorder.orderType"
            list="{'Consumables','Tools','Raw Materials'}" label="Order Type" />

        <s:textfield name="purchaseorder.orderDate" label="Order Date" />

        <s:textfield name="purchaseorder.deliveryDate" label="Delivery Date" />

        <s:textfield name="purchaseorder.exciseDuty" label="Excise Duty" />

        <s:textfield name="purchaseorder.salesTax" label="Sales Tax" />

        <s:textfield name="purchaseorder.remarks" label="Remarks" />

        <s:textfield name="purchaseorder.deliverySchedule"
            label="Delivery Schedule" />

        <s:submit />
    </s:form>
</body>
</html>

新秩序
$(函数(){
$(“#公司”)。更改(函数(){
所选变量=$(“#公司”).val();
警报(选定);
});
});
选择项目:
工作:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<script src="js/jquery-1.11.1.min.js"></script>
<script>
    $(function(){
        $('#state').change(function(){
            var sel = $('#state').val();
            alert(sel);
            });
        });
</script>
</head>

<body>
    <h3>Struts 2 Dynamic Drop down List</h3>
    <s:select label="What's your State" headerKey="-1"
        headerValue="Select State" list="states" name="state" 
        value="defaultState" />
    District :
    <select id="district"></select>
</body>

</html>

$(函数(){
$('#state')。更改(函数(){
var sel=$('#state').val();
警报(sel);
});
});
Struts 2动态下拉列表
地区:

首先,我在第一个HTML中没有看到任何与#company匹配的元素,但在假定的工作示例中,我也没有看到与#state匹配的元素。。。。所以这很令人困惑。您有一个“选择[name=company]”,但没有一个选择框具有值为“company”的id属性

如果页面上有任何内容正在动态更改,比如通过ajax加载的内容(比如添加了id attr),那么您可能需要使用:

这个
#something
选择器(在jQuery和CSS中)就是id选择器。这意味着:

选择
id
属性等于
something
的对象

由于您的
都没有
id
属性集,因此在上述任何情况下都不应该工作

然而,为什么它在那里工作而不是在这里工作的解释很简单:

Struts2在未指定时为您生成
id
id
通常以
formName\u elementName
的形式自动生成(或者
formId\u elementName
,我不确定)

  • 第一个示例

    由于您有一个表单,您选择的
    id
    类似于
    id=“form1_company”
    (或者
    id=“formNewAction1_company”
    ,我不记得Struts2为表单生成
    id
    /
    名称的方式,因为您的
    也缺少它们!)

  • 第二个示例

    未包含在表单中,因此由于其
    名称
    “state”
    ,自动生成的id将是
    id=“state”
    ,并将由
    $(“#state')
    选择器匹配


故事的寓意:
始终为对象提供
id
,至少对于您需要使用JavaScript的问题。

我希望onchange事件在公司发生变化时触发,而不是在订单类型发生变化时触发。我也有同样的想法。@Andrea Ligios您的解决方案和解释解决了问题。@Andrea Ligios是的,先生,我正在按照您的解释进行尝试。
 $(function(){
        $('#ordertype').change(function() {        //id shoud be orderType not company
            var selected = $('#ordertype').val();
            alert(selected);
        });
    });