2

我正在使用以下 tagit 插件 http://webspirited.com/tagit/

这是我试图测试这个插件的 html 页面的代码片段 - 用户在其中键入标签

<input class="text_field" type="text" size="72" id="question_title"/>
<textarea id="question"></textarea>

<ul id="demo3" class="tagit">
<li class="tagit-choice">apple orange<a class="tagit-close">x</a></li>
<li class="tagit-new"><input class="tagit-input ui-autocomplete-input" type="text" autocomplete="off" role="textbox" aria-autocomplete="list" aria-haspopup="true"></li>
<ul class="ui-autocomplete ui-menu ui-widget ui-widget-content ui-corner-all" role="listbox" aria-activedescendant="ui-active-menuitem" style="z-index: 1; top: 0px; left: 0px; display: none;"></ul></ul>

<input id="question_submit" type="submit" value="Ask Question"/>

现在,当用户单击“提问”按钮时 - 会发生以下 ajax 调用

$("#question_submit").live('点击',function(e) {            
        e.preventDefault();     
        var question_val = $("#question").val();
        var question_title = $("#question_title").val();

        var tags = $("#demo3").tagit("tags");
        var s ='';
        for(标签中的变量 i)
            s += tags[i].label + " : " + tags[i].value + "\r\n";
        警报;

            $.post('/course/ask-question', {question: question_val,question_title: question_title,tags:tags}, function(data) {
                如果(data.success=="ok")
                {
                    $("div#wall").prepend(data.question);
                }                   
            },"json");

    });

所以在这个函数中我可以得到标签

var tags = $("#demo3").tagit("tags");
并遍历它们并打印每个标签的标签和值。

现在,当我尝试通过 $.post 将它传递给我的 PHP 控制器时 - 它不起作用 - 我的意思是如果我在调用 ask-question 函数时删除数据标签:标签它工作正常 - 但是当我添加它时 -好像没有调用该函数一样。

有没有一种特殊的方法可以将此标签对象传递给 PHP ?

编辑在 Chrome 开发人员工具中 - 当我提交表单同时保留标签:数据中的标签时 - 我收到以下错误

未捕获的类型错误:非法调用 jquery-1.6.4.min.js:4
e jquery-1.6.4.min.js:4
通过 jquery-1.6.4.min.js:2
通过 jquery-1.6.4.min.js:2
通过 jquery-1.6.4.min.js:2
通过 jquery-1.6.4.min.js:2
通过 jquery-1.6.4.min.js:2
通过 jquery-1.6.4.min.js:2
通过 jquery-1.6.4.min.js:2
(匿名函数)jquery-1.6.4.min.js:2
e.extend.each jquery-1.6.4.min.js:2
通过 jquery-1.6.4.min.js:2
f.extend.param jquery-1.6.4.min.js:4
f.extend.ajax jquery-1.6.4.min.js:4
f.(匿名函数)jquery-1.6.4.min.js:4
(匿名函数) course-feed.js:51
l jquery-1.6.4.min.js:2
f.event.handle jquery-1.6.4.min.js:3
i.handle.k

感谢您的帮助 谢谢

4

2 回答 2

3

有两种简单的方法可以解决这个问题:

1-将选项“fieldName”设置为“tags[]”

$("#myTags").tagit({
    fieldName: 'tags[]'
});

2-(较少推荐)将 js 文件更改为始终将“[]”附加到文件名:

更改每个:

name="' + this.options.fieldName + '"

为了:

name="' + this.options.fieldName + '[]"
于 2013-12-06T17:01:56.330 回答
0

从您正在使用的插件的文档中,tags将是一个数组。如果您需要使用 Array,请尝试更改tags: tags'tags[]':tags查看它是否有效?

于 2013-02-14T14:26:39.453 回答