2013-02-14 32 views
2

我用下面的TAG-IT插件 http://webspirited.com/tagit/jQuery的TAG-IT - 如何通過類型化的標籤回PHP

這是我試圖來測試這個插件的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('click',function(e) {    
     e.preventDefault();  
     var question_val = $("#question").val(); 
     var question_title = $("#question_title").val(); 

     var tags = $("#demo3").tagit("tags"); 
     var s =''; 
     for (var i in tags) 
      s += tags[i].label + " : " + tags[i].value + "\r\n"; 
     alert(s); 

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

    }); 

所以在這個函數中,我能夠得到標籤

var tags = $("#demo3").tagit("tags");
並循環遍歷它們並打印每個標籤的標籤和值。

現在,當我嘗試通過$ .post傳遞給我的PHP控制器 - 它不起作用 - 我的意思是如果我在調用ask-question函數時刪除數據標記:標記,它工作正常 - 但是當我添加它 - 沒有發生好像該函數沒有被調用。

是否有一種特殊的方式將此標籤對象傳遞給PHP?

編輯 在Chrome開發者工具 - 當我提交表單,同時保持標籤:標籤數據 - 我發現了以下錯誤

 
Uncaught TypeError: Illegal invocation jquery-1.6.4.min.js:4 
e jquery-1.6.4.min.js:4 
bY jquery-1.6.4.min.js:2 
bY jquery-1.6.4.min.js:2 
bY jquery-1.6.4.min.js:2 
bY jquery-1.6.4.min.js:2 
bY jquery-1.6.4.min.js:2 
bY jquery-1.6.4.min.js:2 
bY jquery-1.6.4.min.js:2 
(anonymous function) jquery-1.6.4.min.js:2 
e.extend.each jquery-1.6.4.min.js:2 
bY 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.(anonymous function) jquery-1.6.4.min.js:4 
(anonymous function) 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 

感謝您的幫助 感謝

回答

0

從你正在使用的插件的文檔,tags將是一個數組。如果您需要使用陣列,請嘗試將tags: tags更改爲'tags[]':tags,看看它是否有效?

+0

謝謝傑森 - 我試過 - 它沒有任何區別 - 謝謝 – Gublooo 2013-02-14 14:31:51

+1

如果你使用Chrome,你可以打開開發者工具來查看帖子返回的內容。你可以發佈它返回的內容,以便我們看看? – Jason 2013-02-14 14:33:59

+1

對於Firefox,你應該可以使用螢火蟲做同樣的事情。 :-) – Jason 2013-02-14 14:34:27

3

有兩個簡單的方法來解決這個問題:

1設置爲選項「字段名」「標籤[]」

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

2-(少建議報告)更改js文件總是追加'[]' 以文件名:

改變每個:

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

爲:

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