我试图将库中的黑客标准化,以使用JavaScript来定制很难编写客户端代码的企业平台。基本上我想要做的是,允许用户传递对他们想要的数据的引用,无论它如何存储,我将尝试使用一些预定义的方法来获取它。我知道这个过程并不漂亮,但我们没有尝试做任何替代方案。
我使用的是jQuery 1.6.2并且由于其他库的依赖性而绑定到此。
以下一行:
if ($('input[id^=' + lineItemAttributeId + ']').length > 0) {
发出以下错误:对象在IE8中不支持此属性或方法,但没有其他平台。
Services.prototype.getAttributeValue = function(docNum, variableName, defaultValue) {
if (docNum == "1") {
var quoteItemAttributeId = variableName;
if ($('input[id*=' + quoteItemAttributeId + ']').length > 0) {
return $('input[id*=' + quoteItemAttributeId + ']').val();
} else if ($('textarea[id*=' + quoteItemAttributeId + ']').length > 0) {
return $('textarea[id*=' + quoteItemAttributeId + ']').val();
} else if ($('select[name*=' + quoteItemAttributeId + ']').length > 0) {
return $('select[name*=' + quoteItemAttributeId + ']').find("option:selected").val();
} else {
return defaultValue;
}
} else {
var lineItemAttributeId = docNum + "_" + variableName;
if ($('input[id^=' + lineItemAttributeId + ']').length > 0) {
return $('input[id^=' + lineItemAttributeId + ']').val();
} else if ($('textarea[id*=' + lineItemAttributeId + ']').length > 0) {
return $('textarea[id*=' + lineItemAttributeId + ']').val();
} else if ($('select[name*=' + lineItemAttributeId + ']').length > 0) {
return $('select[name*=' + lineItemAttributeId + ']').find("option:selected").val();
} else {
return defaultValue;
}
}
};
我试过了:
if ($('input[id=' + lineItemAttributeId + ']').length > 0) {
if ($('input[id*=' + lineItemAttributeId + ']').length > 0) {
有类似的结果。
对我做错了什么的想法?
答案 0 :(得分:1)
通常,使用jQuery属性选择器的最安全的方法是将内部参数包装在引号中,尤其是当它可以动态估值时。这解决了由空格,特殊字符或其他奇怪之处引起的问题,这些问题可能导致您的jQuery语句被错误地解释。根据{{3}},未加引号的格式仅对单个字符串有效(可靠)。因此,请将您的attribute-equals选择器替换为:$('input[id="' + lineItemAttributeId + '"]').length
。