2013-02-18 124 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 :)