Javascript Jquery onchange事件未触发
我陷入了这样一种情况:我有一个Struts2表单,表单上有一个select标记,当它被更改时会触发一个事件,我不明白为什么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
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”
,我不记得Struts2为表单生成id=“formNewAction1_company”
/id
名称的方式,因为您的
也缺少它们!) - 第二个示例:
未包含在表单中,因此由于其名称
是
,自动生成的id将是“state”
,并将由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);
});
});