【发布时间】:2012-01-12 16:26:06
【问题描述】:
以下代码 sn-p 使用 jQuery1.2.3 可以正常工作,但不适用于最新版本的 jQuery:
$.getJSON(url,{str: $$.val() }, function(j){
if (j.length > 0) {
var options = '<option value="">' +params.firstOption+ '</option>';
for (var i = 0; i < j.length; i++) {
options += '<option value="' + j[i].optionValue + '">' + j[i].optionDisplay + '</option>';
}
}
$dest.removeAttr('disabled')
.html(options)
.find('option:first')
.attr('selected', 'selected');
});
请注意,上面的代码实际上是用于级联下拉列表的 jQuery 插件的一部分。如果我使用 jQuery1.2.3,它会产生预期的结果。完整的插件代码如下:
(function($){
$.fn.linkedSelect = function(url,destination,params) {
var params = $.extend({
firstOption : 'Please Select',
loadingText : 'Loading...'
},params);
var $dest = $(destination);
return this.each(function(){
$(this).bind('change', function() {
var $$ = $(this);
$dest.attr('disabled','false')
.append('<option value="">' +params.loadingText+ '</option>')
.ajaxStart(function(){
$$.show();
});
$.getJSON(url,{str: $$.val() }, function(j){
alert('User clicked on this.');
if (j.length > 0) {
var options = '<option value="">' +params.firstOption+ '</option>';
for (var i = 0; i < j.length; i++) {
options += '<option value="' + j[i].optionValue + '">' + j[i].optionDisplay + '</option>';
}
}
$dest.removeAttr('disabled')
.html(options)
.find('option:first')
.attr('selected', 'selected');
}); // end getJSON
}); // end change
}); // end return each
}; // end function
})(jQuery);
请注意,它无法生成以下警报消息
alert('User clicked on this.');
如果我使用最新版本的 jQuery,getJSON 函数中写入的内容用于调试目的。而且我还使用JS调试器进行了跟踪,如果我使用最新版本的jQuery,它无法进入getJSON函数。但是,如果我使用 jQuery1.2.3,它会显示此警报消息。
在错误控制台中,警告消息是:
Warning: reference to undefined property b.p.height
Source File: http://localhost//js/jquery.jqGrid.min.js Line: 99
Warning: reference to undefined property b.p.serializeGridData
Source File: http://localhost/js/jquery.jqGrid.min.js Line: 62
Warning: reference to undefined property jQuery.event.triggered
Source File: http://localhost/js/jquery1.7.js Line: 2924
Warning: reference to undefined property elem[jQuery.expando]
Source File: http://localhost/js/jquery1.7.js Line: 1719
我应该改变什么以适应最新版本的 jQuery。谢谢你。
【问题讨论】:
-
欢迎来到 Stack Overflow! “它不起作用”从不是一个好的错误描述。请描述出现了什么问题、收到的错误消息等。
-
那么失败到底在哪里?你可以在代码中添加一些console.log来找出你正在尝试使用的最新版本的jquery以及你是如何加载它的?
-
您能否更深入地解释一下它是如何不工作的以及您的测试用例是什么?您在完全相同的代码上测试完全相同的输入,唯一的区别是 jQuery 版本,对吧?
-
@Andrew Latham,如果我使用 jQuery1.2.3,我会得到想要的结果。
-
是的,现在说得通了。我同意马特 - 看起来你需要更新 jqGrid