【问题标题】:javascript array only first character displayedjavascript数组只显示第一个字符
【发布时间】:2013-02-18 14:59:27
【问题描述】:

我目前正在开发一个 ckeditor 插件,选择框从数据库中获取其数据,我只能让第一个字符出现在选择框中。

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' );
    }
}

如您所见,我只是将数组放入 items 中,但它只显示第一个字符

那我做错了什么?

【问题讨论】:

  • 能否提供更多代码
  • 如何生成该下拉列表?您可能将字符串视为数组。
  • @clph3r 根据要求提供更多信息。 @RocketHazmat 像这样从 db 获取 page1,page2,page3 拆分以将数组设置为项目,所以直到我使 pages 数组正常工作,但是当我说 items : pages 它只得到第一个字符。它将第二个字符视为选项值:S
  • 你能扩展一下 “我要做什么来制作我的选择框:” 部分吗?你所拥有的只是一个对象;查看完整的命令会很有帮助。
  • 尝试将本地数据放入选择中。 var pages = [{0: 'Home', 1: 'Control Panel', ...}];。如果您的选择按预期工作,那么我认为这是服务器端问题。如果这是服务器端问题,请尝试在您的 php 中返回一个 json 舞会,其中的数据可以在您的选择中使用

标签: javascript jquery plugins ckeditor


【解决方案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

【讨论】:

  • 我无法从家里访问代码,所以我明天试试这个。提前感谢您的努力:)
【解决方案2】:

基于 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: 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: '主页', 1: '控制面板', ...}];。 ...


我试过了 :) 它可以工作,但是由于页面不断添加和删除,我无法在选择中对页面进行硬编码


Ayman Safadi:根据你之前的评论,这行得通……

只有当我像[['home']['Control Panel']] 那样对其进行硬编码时,它才能工作。 [{0: 'Home', 1: 'Control Panel', ...}] 没用。很抱歉有点不清楚我的意思。

感谢您帮助我解决我的问题。
感谢 Ayman Safadi / pbaris :)

【讨论】:

    猜你喜欢
    • 2017-01-30
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    • 2014-03-01
    • 2020-11-29
    • 2022-06-19
    • 1970-01-01
    • 2017-10-07
    相关资源
    最近更新 更多