如果我误解了这个问题,请告诉我,但我想我已经处理过类似的事情。
浏览器都以不同的方式处理更改事件,并且通常不会触发,直到用户在更新该字段后单击离开该字段(通过单击页面上的其他位置并巩固他们的更改)。
我的解决方法是创建一个为我工作的函数,并让该函数在点击时运行而不是更改。为了覆盖您的基础(并且没有不必要的动态数据加载),我会这样做:
- 创建全局变量或对象以跟踪每个下拉列表的状态(您可以存储 id、值等 - 这基本上允许您检查下拉列表。对于默认状态,创建所有变量并将其值设置为空白)
- 创建一个在每次单击任何字段时运行的函数并传入下拉列表(通过 ID、名称或实际的 jQuery 对象)
JavaScript 部分
$(document).ready(function() {
// Attach click function to princ
$("select[name='princ']").click(function() {
var value = $(this).val(); // Grab the value
if (value != demo.globals.princ) { // Check if the value is the old value
demo.checkDropdown('princ', 'princ2', value); // If it's a new value, grab the selected value and run the checkDropdown function
demo.globals.princ = value; // Set the global value
$('#status').text("loading new values for princ " + value);
} else {
$('#status').text("princ values already loaded " + value); // Unnecessary but used to output the status of the clicks
}
});
// Attach click function to princ2
$("select[name='princ2']").click(function() {
var value = $(this).val();
if (value != demo.globals.princ2) {
demo.checkDropdown('princ2', 'princ3', value);
demo.globals.princ2 = value;
$('#status').text("loading new values for princ2 " + value);
} else {
$('#status').text("princ2 values already loaded " + value);
}
});
});
// Create a global object to avoid function collision
var demo = {};
// Create global variables
demo.globals = {
princ: 0,
princ2: 0
}
// Dropdown population function
demo.checkDropdown = function(dropDownName, nextDropDown, value) {
// Check if it's already populated with the correct data, otherwise load it
// You can also load dynamic data here via AJAX and update the select field
var dropDownHtml = "<option value='1'>1</option>";
dropDownHtml += "<option value='2'>2</option>";
dropDownHtml += "<option value='3'>3</option>";
$("select[name='" + nextDropDown + "']").html(dropDownHtml);
}
的HTML
<body>
<form>
<div id="status">Page loaded</div>
<select name="princ">
<option value="0">Please select one</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<select name="princ2">
</select>
<select name="princ3">
</select>
</form>
</body>
我真的希望这可以帮助你。它比您要求的要多一点,但它是一个完整的、有效的示例,说明了如何在更改时获取下拉值。