2016-02-19 39 views
0

我一直在試圖創建一個文本框,它跨越它,類似於這裏的,但我卡住了 - 我不知道該怎麼做。代碼本身不起作用。我的代碼:css - 使像標籤一樣stackexchange

$(".writetags").each(function(){ 
     var elem = $(this); 
     elem.bind("keyup", function() { 
      elem.data("oldVal", $(this).data("newVal") || ""); 
      elem.data("newVal", $(this).val()); 
      var oldVal = elem.data("oldVal"); 
      var newVal = $(this).val(); 
      var newChar = newVal.charAt(newVal.length-1); 
      var oldChar = oldVal.charAt(oldVal.length-1); 
      if(newChar!=oldChar){ 
       if(newChar==","){ 
        var at = 0; 
        if(newVal.lastIndexOf("</span>")>=0){ 
         at = newVal.lastIndexOf("</span>"); 
        } 
        var toSpan = newVal.substring(at, newVal.length-1); 
        var newTxt = newVal.substring(0, at)+"<span class=\"id\">"+toSpan+"</span>"; 
        elem.val(newTxt); 
       } 
      } 
     }); 
    }); 

HTML:

<input type="text" class="writetags" id="tags" style="width: 95%;direction:rtl;font-size: 18px;"/> 

$(".writetags").each(function() { 
 
    var elem = $(this); 
 
    elem.bind("keyup", function() { 
 
    elem.data("oldVal", $(this).data("newVal") || ""); 
 
    elem.data("newVal", $(this).val()); 
 
    var oldVal = elem.data("oldVal"); 
 
    var newVal = $(this).val(); 
 
    var newChar = newVal.charAt(newVal.length - 1); 
 
    var oldChar = oldVal.charAt(oldVal.length - 1); 
 
    if (newChar != oldChar) { 
 
     if (newChar == ",") { 
 
     var at = 0; 
 
     if (newVal.lastIndexOf("</span>") >= 0) { 
 
      at = newVal.lastIndexOf("</span>"); 
 
     } 
 
     var toSpan = newVal.substring(at, newVal.length - 1); 
 
     var newTxt = newVal.substring(0, at) + "<span class=\"id\">" + toSpan + "</span>"; 
 
     elem.val(newTxt); //change to HTML 
 
     } 
 
    } 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="text" class="writetags" id="tags" style="width: 95%;font-size: 18px;" placeholder="Seperate tags using commas." />
這不能正常工作,你可以在上面的代碼片段看。它不僅不顯示的跨度,如果鍵入 tag1, tag2,而不是把它 <span...>tag1</span><span...>tag2</span>其寫入 <span class="id">tag1<span class="id"></span>tag2</span>

我不得不使其與跨越DIV工作,縮短由新跨越的長度,但我輸入的想法不知道該怎麼做,我寧願保持簡單。

由於提前,NonameSL

+0

那不是怎麼這麼實際標註工作。如果您打算檢查HTML,您會發現textarea只是將_next_縮小爲新添加的span標籤。通過簡單地檢查元素並從中獲取靈感,看看它如何工作。 – somethinghere

+0

請參閱https://github.com/aehlke/tag-it,http://stackoverflow.com/tags;相關http://stackoverflow.com/questions/35401250/html-fridge-magnet-tags – guest271314

回答

2

如果您可以添加外部庫,那麼Selectize將對您非常有用。檢查API文檔。這很簡單,只要

// initialize the selectize control 
var $select = $('select').selectize(options); 

見JS小提琴爲例,http://jsfiddle.net/MuEh5/

3

不能附加任何東西,input元素,因爲它是一個自閉的元素。 <img><br>元素也是如此。這意味着他們只使用一個標籤來創建,他們不能生孩子。解決方案是創建一個輸入並將標籤放置在它上面。

+0

好吧,但如果我這樣做,我必須每次縮短文本框,我不知道該怎麼做。你能幫助我嗎?另外,我將如何計算跨度的長度? – NonameSL

+0

您只需計算一個長度 - 添加span後的空間長度_remaining_。基本上,包裝寬度減去任何跨度'innerWidth',以及您正在使用的任何間距。 – somethinghere

+0

最簡單的事情就是實際檢查你想要模仿的功能。無論好壞,前端開發人員製作和共享的所有內容都變得開源。 – GMchris