我有一个表单,用户输入一个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中却没有。我没有在IE 8中测试过。我们的公司标准仍然是7但我们正在迁移到8,所以它需要在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>
/
<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>
答案 0 :(得分:0)
根据问题后面的评论,您似乎已将问题缩小到事件注册,看到没有任何事情发生,甚至没有调用“警报”。
根据following answer到另一个类似的SO问题,看起来你想要做的,即在'change'事件上使用live()方法,在IE7中不起作用。
答案 1 :(得分:0)
自从我找到了解决方法后,我正在回答我自己的问题。
我发现这个link引用了解决我问题的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);
});
}
});