javascript:object Object而不是set =的值=

时间:2010-08-27 14:23:22

标签: javascript

所以,我试图根据下拉过滤器绘制相同的数据,但我没有通过将数据存储到传递给绘图函数的变量。我的提醒提供object Object,但不应该是totalValue(对于此示例)?

html

   <select id="performance_chart_filter">
  <option value="totalValue">Total by Value</option>
  <option value="openValue">Open by Value</option>
  <option value="declinedValue">Declined by Value</option>
  <option value="acceptedValue">Accepted by Value</option>
</select>

javascript

$j("#performance_chart_filter").change(function(){
    plotWithChoice();
});



function plotWithChoice() {
   var d = {
        "totalValue": {
            label: "Total",
            clickable: true,
            hoverable: true,
            data: <%= @total %>
        }
.
.
.
};

    var filter = $j("#performance_chart_filter");
    var data = [d[filter.val()]];
alert(data);

2 个答案:

答案 0 :(得分:2)

没有。 filter.val()很可能是字符串"totalValue"

d[filter.val()](或d["totalValue"])将是对象totalValue的属性d的值,它是一个对象,因此输出Object object alert,因为这是像这样的通用对象的默认字符串表示。

[d[filter.val()]]是一个包含一个元素的数组,即上面提到的对象。

要调试这个,我建议您使用调试器(例如Firebug),因为它可以以可读的形式显示对象。

或使用.toSource()方法:

alert(data.toSource());

答案 1 :(得分:1)

如果d对象的所有成员与显示的成员相似,并且d在范围内,则alert(data)将始终显示“object object”。

如果filter.val()是“totalValue”,那么数据将是对象:

{
  label: "Total",
  clickable: true,
  hoverable: true,
  data: <%= @total %>
}

这没有明确的toString方法,因此将使用默认的toString

尝试alert(data.label),希望这会显示“总计”。