【问题标题】:jQuery Error: Object doesn't support this property or methodjQuery 错误:对象不支持此属性或方法
【发布时间】:2013-11-06 23:39:28
【问题描述】:

我一直在寻找为什么这段代码只在 IE 中中断的原因。似乎可以在 Firefox 和 Chrome 中使用。 IE8 调试器不断抱怨并突出显示这段代码。

var query = {
            display: opts.display.join(', '),
            quotes: opts.stocks.map(function (stock) {
                return '"' + stock + '"';
            }).join(', ')
        }

甚至使用 jQuery.noConflict 进行了尝试,但这只会使其无法在任何浏览器中运行。在这个项目中根本没有专门调用原型,它只是一个基本的股票符号列表,上面的这个变量基本上只是根据 YQL 标准将两者之间的 " 和逗号联系起来。不知道为什么会导致错误。

-更新 我发现了为什么我会收到这个错误。 IE8 及以下不支持 javascript map() 函数。我已经阅读了替代示例,有人建议使用 jQuery map 函数,这似乎也不起作用,或者我只是没有正确编写它。所有尝试都在 var 查询上,我试图基本上递归地遍历数组并添加 YQL 查询所需的标点符号。

function getStock(opts, complete) {
        var defs = {
            desc: false,
            baseURL: 'http://query.yahooapis.com/v1/public/yql?q=',
            query: 'select {display} from yahoo.finance.quotes where symbol in ({quotes}) | sort(field="{sortBy}", descending="{desc}")',
            suffixURL: '&env=store://datatables.org/alltableswithkeys&format=json&callback=?'
        };
        opts = $.extend({
            display: ['*'],
            stocks: []
        }, opts || {});
        if (!opts.stocks.length) {
            complete('No stock defined');
            return;
        }

        //var query =  $.map({
            //display: opts.display.join(', '),
            //quotes: opts.display.stocks(function(stocks) {
                //return '"' + stocks + '"';
            //}).join(', ')
       // });
        //var query = {
            //display: opts.display.join(', '),
            //quotes : $.map(opts.display.stocks(quotes, function(stock) {
                //return '"' + stock + '"';
            //})).join(', ')
        //};
        alert(query);
        //var query = {
            //display: opts.display.join(', '),
            //quotes: opts.stocks.map(function (stock) {
                //return '"' + stock + '"';
            //}).join(', ')
        //};
        //function (stock) returns "ticker symbol"
        defs.query = defs.query.replace('{display}', query.display).replace('{quotes}', query.quotes).replace('{sortBy}', defs.sortBy).replace('{desc}', defs.desc);
        defs.url = defs.baseURL + defs.query + defs.suffixURL;
        $.getJSON(defs.url, function (data) {
            var err = null;
            if (!data || !data.query) {
                err = true;
            }
            complete(err, !err && data.query.results);
            var items = data.query.results.quote;
            alert(items[0].LastTradePriceOnly);
        });
    }

我已包含此变量替代方案的所有失败迭代。它们都不适用于任何浏览器。也许有人可以帮助将其翻译成 jQuery equivelant?

【问题讨论】:

  • 哪一行给你这个错误?
  • 什么是opts.stocks
  • 我假设它是opts.stocks.map 行。 Array.map 在 IE8 中不存在。您需要将其填入:github.com/kriskowal/es5-shim
  • ???这一行甚至没有使用 jQuery!
  • 如果 opts.stocks 是一个 jquery 对象,您可能需要在 .map() 之后使用 .get()。否则,这与 jQuery 无关。

标签: jquery


【解决方案1】:

好吧,我想通了,使用 jQuery.com 对 map 函数的引用,这将是上一个语句的正确转换

原版

var query = {
            display: opts.display.join(', '),
            quotes: opts.stocks.map(function (stock) {
                return '"' + stock + '"';
            }).join(', ')
        };

jQuery 转换

var query = {
            display: opts.display.join(', '),
            quotes: $.map(opts.stocks, function (stock) {
                return '"' + stock + '"';
            }).join(', ')
        };

过期 IE 浏览器的结束映射问题

【讨论】:

    猜你喜欢
    • 2011-08-25
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    • 2013-03-23
    • 2011-06-26
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    相关资源
    最近更新 更多