2013-02-18 87 views
3

我目前正在研究一个ckeditor插件,selectbox从数据库获取它的数据,我只能得到第一个字符出现在选择框中。javascript array只显示第一个字符

get_pages.php

$query = selectQuery(' 
    SELECT title, pageID 
    FROM `page_info` 
    WHERE partnerID =?',array($partnerId)); 
$test = ''; 
foreach ($query as $key => $value) { 
$test .= $value['title'].","; 
} 

Plugin.js

var pages = $.post(
     "/action/ac_select_pages.php", 
     { pid: "1" }, 
     function(data) { 
      return (data);   
    } 
); 

pages = pages.responseText.split(','); 

我的变量:

pages: Array[31] 
    0: "Home" 
    1: "Control Panel" 
    2: "24/7 Support" 
    3: "Script/Databases" 
    4: "Last Announcment" 
    5: "E-mail: No Limit" 
    6: "Webmail & Push Mail" 

等..

什么我让我的选择框:

{ 
    type : 'select', 
    id : 'moreinfo', 
    label : 'Meerinfo Link', 
    style : 'width:300px;', 
    items : pages , 
    setup : function(element) 
    { 
    this.setValue(element.getAttribute("moreinfo")); 
    }, 
    commit : function(element) 
    { 
    var id = this.getValue(); 
    // If the field is non-empty, use its value to set the element's id attribute. 
    if (id) 
    element.setAttribute('moreinfo', id); 
    // If on editing the value was removed by the user, the id attribute needs to be removed. 
    // http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.dom.element.html#removeAttribute 
    else if (!this.insertMode) 
     element.removeAttribute('moreinfo'); 
    } 
} 

正如你可以看到我简单地把数组中的项目,但它显示的第一个字符 Dialog Block

那我做错了吗?

+0

你能提供更多的代码 – cIph3r 2013-02-18 15:00:57

+4

如何生成下拉菜单?你可能像字符串一样处理字符串。 – 2013-02-18 15:02:42

+0

@ clph3r更多信息按要求提供。 @RocketHazmat从数据库获取这样的'第1页,第2页,page3' 分裂,使阵列 组阵列作为项目 所以让我打的页面阵列它是工作,但是当我说'项目:pages'它只是变得第一个字符。它将第二个字符视为选项值:S – 2013-02-18 15:13:40

回答

1

因此,要总结...

split()通过分离串成子拆分字符串对象到字符串数组。

所以,想必你pages.responseText看起来是这样的:

Home,Control Panel,24/7 Support,Script/Databases,Last Announcment,E-mail: No Limit,Webmail & Push Mail 

这意味着做pages = pages.responseText.split(',');后,pages看起来是这样的(一个数组):

["Home", "Control Panel", "24/7 Support", "Script/Databases", "Last Announcment", "E-mail: No Limit", "Webmail & Push Mail"] 

根据您的previous comment,这作品:

var pages = [{0: 'Home', 1: 'Control Panel', ...}]; 

正如你可以看到(具有多个值的阵列):

["Home", "Control Panel", ...] 

相同(与几个属性一个对象的阵列):

[{0: 'Home', 1: 'Control Panel', ...}] 

如果所有这一切仍然如此,像这样的事情应该工作:

var pagesObject = {}; 
for (var i=0, max=pages.length; i<max; i += 1) { 
    pagesObject[i] = pages[i]; 
} 

var correctPages = [ pagesObject ]; 

演示在这里:http://jsbin.com/ikazes/1/edit

+0

我无法从家中访问代码,所以我明天会试试这个。 thx提前努力:) – 2013-02-18 19:39:03

0

基础上为艾曼Sadadi的环我得到了它最后吧:)

// page1, 1,00,page2, 12,00,page3, 23 \\ 
pages = pages.responseText.split(',00,'); 
// ["page1, 1","page2, 12","page3, 23"] \\ 
var a = []; 
a[0] = ''; 
for (var b = 0; b < pages.length; b++) { 
    var c = pages[b].split(', '); 
    var pageName = c[0]; 
    var pageId = c[1]; 
    a[b] = [ pageName, c ]; 
}; 

一现:

a: Array[31] 
    0: Array[2] 
    0: "Home" 
    1: Array[2] 
     0: "Home" 
     1: "1" 
    length: 2 
    __proto__: Array[0] 
1: Array[2] 
    0: "Control Panel" 
    1: Array[2] 
     0: "Control Panel" 
     1: "152" 
    length: 2 
    __proto__: Array[0] 

这是一样的要求[['Home']['Control Panel']]。 如果我使用它作为我的项目,它可以正常工作。

之前会话:

尝试将本地数据的选择。 var pages = [{0:'Home',1:'控制面板',...}] ;. ...


我tryed说:)和它的作品,但由于页面也在不断添加和删除,我不能硬编码在选择


艾曼·萨法迪的网页:根据到你以前的评论,这个作品...

只有我硬编码它像[['home']['Control Panel']]它的作品。 [{0: 'Home', 1: 'Control Panel', ...}]没有工作。我很抱歉对我的意思有点不清楚。

谢谢你帮我解决我的问题。
现金去艾曼·萨法迪/ pbaris :)