0

ユーザーが6桁の数字を入力し、取得ボタンをクリックするフォームがあります。別の形式のデータを返すajax呼び出しが実行されます(ページの更新はありません)。返されるデータ内には、連鎖選択が含まれます(複数のアイテムが返される場合は複数)。以下はajaxコードです。

$(".platform").live("change", function() {
    alert('Updating models...');
    var firstOption = $(this);
    if (firstOption.closest('tr').find('.platform').val() == '')
        {
            firstOption.closest('tr').find('.model').html('<option value=""></option>');                
        }
    else
        {
            firstOption.closest('tr').find('.model').html('<option value="">Updating...</option>');
            $.getJSON("dataCalls/getModels.cfm",{platform: $(this).val()},      
            function(j){
                var options = '';
                for (var i = 0; i < j.length; i++) 
                    {
                        options += '<option value="' + j[i].optionValue + '">' + j[i].optionDisplay + '</option>';
                    }
            firstOption.closest('tr').find('.model').html(options).effect("highlight", {}, 3000);
            });
        }
});

これはFFではうまく機能していますが、IE7では機能していません。私はIE8でテストしていません。8に移行しているので、7で動作する必要がありますが、会社の標準はまだ7です。

これがajax呼び出しをトリガーするはずのコードです。

<th class="form"><label>Platform / Model</label></th>
        <td> <select class="platform required" name="platform">
                <option ></option>
                <cfloop query="rsPlatform">
                    <option value="#rsPlatform.optionValue#" <cfif rsRequestSystems.platform eq rsPlatform.optionValue>selected</cfif>>#rsPlatform.optionValue# - #rsPlatform.optionDesc#</option>
                </cfloop>
            </select>
            &nbsp; / &nbsp;
            <select class="model required" name="model">
                <option selected></option>
                <cfloop query="rsModels">
                    <option value="#rsModels.optionValue#" <cfif rsRequestSystems.model eq rsModels.optionValue>selected</cfif>>#rsModels.optionDesc#</option>
                </cfloop></select></td>
4

2 に答える 2

0

質問に続くコメントに基づいて、問題をイベント登録に絞り込んだようです。何も起こっていないので、「アラート」も呼び出されていません。

別の同様のSO質問に対する次の回答によると、実行しようとしていること、つまり「change」イベントでlive()メソッドを使用することは、IE7では機能しないように見えます。

于 2011-03-16T14:37:52.647 に答える
0

回避策を見つけたので、私は自分の質問に答えています。

問題を解決したlivequeryを参照するこのリンクを見つけました。

$(".platform").livequery("change", function() {
    var firstOption = $(this);
    alert('Updating Modules 302');
    if (firstOption.closest('tr').find('.platform').val() == '')
        {
            firstOption.closest('tr').find('.model').html('<option value=""></option>');                
        }
    else
        {
            firstOption.closest('tr').find('.model').html('<option value="">Updating...</option>');
            alert('Updating Modules 310');
            $.getJSON("index.cfm?do=misc.getModels",{platform: $(this).val()},      
            function(j){
                var options = '';
                for (var i = 0; i < j.length; i++) 
                    {
                        options += '<option value="' + j[i].optionValue + '">' + j[i].optionDisplay + '</option>';
                    }
            firstOption.closest('tr').find('.model').html(options);
            });
        }
});
于 2011-03-16T15:19:15.683 に答える