不支持对象或属性

时间:2014-08-27 23:51:30

标签: javascript jquery internet-explorer-8

我试图将库中的黑客标准化,以使用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) {

有类似的结果。

对我做错了什么的想法?

1 个答案:

答案 0 :(得分:1)

通常,使用jQuery属性选择器的最安全的方法是将内部参数包装在引号中,尤其是当它可以动态估值时。这解决了由空格,特殊字符或其他奇怪之处引起的问题,这些问题可能导致您的jQuery语句被错误地解释。根据{{​​3}},未加引号的格式仅对单个字符串有效(可靠)。因此,请将您的attribute-equals选择器替换为:$('input[id="' + lineItemAttributeId + '"]').length