質問を誤解している場合はお知らせください。ただし、同様のことを扱ったと思います。
ブラウザはすべて変更イベントを異なる方法で処理し、通常、ユーザーがフィールドを更新した後 (ページの別の場所をクリックして変更を確定する) をクリックしてそのフィールドから離れるまで発生しません。
私の回避策は、私のために仕事をする関数を作成し、その関数を変更する代わりにクリックで実行することでした。あなたのベースをカバーするために(そして不必要に動的なデータをロードしないようにするために)、私は次のようにします:
- グローバル変数またはオブジェクトを作成して、各ドロップダウンの状態を追跡します (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>
これがお役に立てば幸いです。これはあなたが求めているものよりも少し多いですが、変更時にドロップダウン値を取得する方法の完全で実用的な例です。