看起来IE8不支持Jquery .filter()
方法 - Why won't .filter() work in Internet Explorer 8?
我有以下代码来过滤下拉列表
if($('#deliveryPostcodeEstimator').length > 0) {
$('.shippingregionselector').hide();
$('#deliveryPostcodeEstimator')
.blur(function() {
//Set to default
$('select[name=country] option:last').prop('selected', true);
//var defaultPostcode = 'GL50';
//$("select[name=country] option").filter(function() {
// return $(this).text() == defaultPostcode;
//}).prop('selected', true);
//Set to matching postcode value if set
$('select[name=country] option').filter(function(index) {
return ($(this).text() == $('#deliveryPostcodeEstimator').val().toUpperCase().substring(0,4).trim())
}).prop('selected', true);
//Submit
var thisForm = $(this).closest("form");
thisForm.submit();
})
.keyup(function() {
$(this).val($(this).val().toUpperCase());
});
$('button.pcodechange').click(function() {
var thisForm = $(this).closest("form");
thisForm.submit();
});
}
问题在于
return ($(this).text() == $('#deliveryPostcodeEstimator').val().toUpperCase().substring(0,4).trim())
出现以下错误
Object doesn't support this property or method
如何按照上一篇文章的建议将其“包装在对象中”?
由于
答案 0 :(得分:5)
您的错误可能是因为.trim()
来电。
String.prototype.trim
不适用于Internet Explorer 8:
http://kangax.github.com/es5-compat-table/
你可以改用jQuery.trim:
var search = $.trim($('#deliveryPostcodeEstimator').val().toUpperCase().substring(0,4));
$('select[name=country] option').filter(function(index) {
return $(this).text() == search;
}).prop('selected', true);
您还可以使用cernunnos链接中描述的纯JavaScript解决方案:
答案 1 :(得分:0)
IE9及以后支持.filter()
以下是您可以做的事情: 定义自己的过滤器。
if (!Array.prototype.filter) {
Array.prototype.filter = function (fun /*, thisp */) {
"use strict";
if (this === void 0 || this === null)
throw new TypeError();
var t = Object(this);
var len = t.length >>> 0;
if (typeof fun !== "function")
throw new TypeError();
var res = [];
var thisp = arguments[1];
for (var i = 0; i < len; i++) {
if (i in t) {
var val = t[i]; // in case fun mutates this
if (fun.call(thisp, val, i, t))
res.push(val);
}
}
return res;
};
}