我目前正在开发一个ckeditor插件,selectbox从数据库中获取数据,我只能在首选项中显示第一个字符。
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' );
}
}
正如您所看到的,我只是将数组放入项目中,但它只显示第一个字符
那么我做错了什么?
答案 0 :(得分:1)
所以,总结一下......
split()
通过将字符串分隔为子字符串,将String对象拆分为字符串数组。
所以,大概你的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 ];
答案 1 :(得分:0)
根据 Ayman Sadadi 的for循环,我最终得到了它:)
// 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现在是:
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:&#39; Home&#39;,1:&#39; Control Panel&#39;,...}];。 ......
我尝试了:)它可以工作,但由于页面不断添加和删除,我无法对选择中的页面进行硬编码
Ayman Safadi:根据您之前的评论,这有效......
只有我像[['home']['Control Panel']]
那样对其进行硬编码才有效。 [{0: 'Home', 1: 'Control Panel', ...}]
没有用。我很遗憾对我的意思不太清楚。
感谢您帮助解决我的问题 致信Ayman Safadi / pbaris:)