2011-09-05 36 views
1

我可以创建这样一个jQuery对象内联(此代码工作)“多维度” JSON在JavaScript

$('#tip').qtip({ 
      content: el.REASON, 
      position: { 
       corner: { 
        target: 'rightMiddle', 
        tooltip: 'leftMiddle' 
       } 
      }, 
      style: { 
       tip: { 
        corner: 'leftMiddle', 
       }, 
       border: { 
        radius: 11, 
        width: 4 
       }, 
       name: 'red' 
      }, 
      show: { 
       ready: true, 
       effect: { type: 'slide' } 
      }, 
      hide: { 
       when: { target: jq, event: 'click' }, 
         effect: function() { 
          $(this).fadeTo(200, 0); 
         } 
      } 
     }) 

现在我想这个JSON移动到一个功能,因为我有多个构造函数我代码(此代码是不工作)

function qtipJSON(el, jq) { 
    return 
     { 
      content: el.REASON, 
      position: { 
       corner: { 
        target: 'rightMiddle', 
        tooltip: 'leftMiddle' 
       } 
      }, 
      style: { 
       tip: { 
        corner: 'leftMiddle', 
       }, 
       border: { 
        radius: 11, 
        width: 4 
       }, 
       name: 'red' 
      }, 
      show: { 
       ready: true, 
       effect: { type: 'slide' } 
      }, 
      hide: { 
       when: { target: jq, event: 'click' }, 
         effect: function() { 
          $(this).fadeTo(200, 0); 
         } 
      } 
     } 
}; 

$('#tip')(qtipJSON(el, qj)) 

我的错误是

Uncaught SyntaxError: Unexpected token {

我注意到,这是因为嵌套的jsons。

工作:

function a(){ 
return {sdasda:'asda',sdasd:'asdas'} 
} 

for(i in a()){ 
document.write(i) 
} 

也在努力:

function a(){ 
return {sdasda:'asda',sdasd:'asdas', aa:{sds:'1212', sddss:'2222'}} 
} 

for(i in a()){ 
document.write(i) 
} 
+2

这不是JSON,它是一个对象字面值。 – nnnnnn

回答

4

替换此

return 
     { 
      content: el.REASON, 
      ... 

本:

return { 
      content: el.REASON, 
      ... 

和欢迎的人被JS分号注入受伤的俱乐部。

+0

生活和学习。谢谢! – Dan

1

,如果你不想因为隐含分号注入返回一个对象字面不能结束与return线。

通过将左开的左大括号移动到与返回相同的行,它将起作用。

下面是你有什么轻微的调整:http://jsfiddle.net/FqCVD/(我做了一些字符串文字来补偿未定义的变量)。

0

你最后一个例子的问题是缺少:aa后。它应该是

return {sdasda:'asda',sdasd:'asdas', aa: {sds:'1212', sddss:'2222'}} 

您的函数函数qtipJSON(el,jq)在返回结尾处缺少分号。

正如其他人所提到的,问题是线路上的“return”关键字本身。当你遇到像这样的问题时,请尝试JSLint。它会报告这个错误。

+0

你说得对,我在那里输错了。关于你的第三行:我认为它应该以另一种方式修复 – Dan

-1

的JavaScript将假定你忘了一个半柱,给你这一点:

return {; 
    par: 'val' 
}); 

这将无法正常工作。你应该做的是把你的返回值/对象括在括号中,像这样:

return ({ 
    par: 'val' 
}); 
+1

嗯。相当肯定你不需要那样做。如果你的回报本身就是一条线,它就会窒息,但不需要把支具放在支具上。 –