В рельсах ввод токена jQuery не разрешает пользовательский ввод - PullRequest
3 голосов
/ 03 апреля 2012

В рельсах ввод токена jQuery не допускает пользовательский ввод.

Я скачал версию токена 1.6.0, но не могу ввести пользовательскую запись. Как только я введу некоторый текст в текстовое поле и уберу курсор, текст исчезнет. Только мне нужно выбрать из списка автозаполнения.

Например: - Если я использую нижеприведенную функцию сценария, каким будет решение?

<code><pre>
<script type="text/javascript">
tokenInput("SOME_ID", "/token_input/name");

function tokenInput(text_box_id, url){
    jQuery("#" + text_box_id).tokenInput(url, {
      allowCustomEntry: true,
      preventDuplicates: true,
      theme: "facebook",
    });
  }
</script>

Пожалуйста, дайте мне решение для этого, ввод токена должен разрешить пользовательский ввод.

Ответы [ 2 ]

1 голос
/ 27 ноября 2013

Это работает для меня как очарование.

Мне нужна была пользовательская запись, в которой будет храниться база данных, а идентификатором автоматического приращения будет значение этого токена.

Я исправил это следующим образом,Есть хитрости, при добавлении токена на сервер отправляется запрос на добавление нового токена в базу данных, а его новый идентификатор вставки поступает на клиентскую сторону и устанавливается как значение добавленного токена.

Получить плагин с помощьюразрешить бесплатное создание тегов с github.

<input type="text" name="w_i_tk" id="w_i_tk">

<script>
$(document).ready(function() {.

    $("#w_i_tk").tokenInput("token.php", {
        theme: "facebook",
        hintText: "Type tag by which other can search, e.g. PHP, MySql etc.",
        preventDuplicates: true,
        tokenLimit: 5,
        minChars: 2,
        onAdd: function (item) {
            if(item.id=="0") {
                $.ajax({
                    type:"GET",
                    url:"token.php",
                    data:{action:"newtoken",name:item.name},
                    success: function(resp) {
                        $("#w_i_tk").tokenInput("remove", {name: item.name});
                        $("#w_i_tk").tokenInput("add", {id: resp, name: item.name});    
                    }
                });

            }

        },
        animateDropdown: false,
        allowFreeTagging: true
    });
});
</script>

token.php

<?php
if(isset($_GET["q"])) {
    $q = trim($_GET["q"]);
    $isSearchItemExists = false;
    $sql = sprintf("SELECT token_id, token from tokens WHERE token LIKE '%%%s%%' ORDER BY popularity DESC LIMIT 10", mysql_real_escape_string($q));
    $rec = mysql_query($sql);

    $arr = array();
    while($row = mysql_fetch_array($rec)) {
        $obj = new stdClass();
        $obj->id = $row["token_id"];
        $obj->name = $row["token"];
        if($obj->name==$q) {
            $isSearchItemExists = true; 
        }
        $arr[] = $obj;
    }
    if(!$isSearchItemExists) $arr = array_merge(getNewToken($q),$arr);

    $json_response = json_encode($arr);


    echo $json_response;

} else if(isset($_GET["action"]) && $_GET["action"]=="newtoken") {

    $token = strtolower($_REQUEST["name"]);
    $sql = "SELECT * FROM tokens WHERE token='$token'";
    $rec = mysql_query($sql);
    $numRows = mysql_num_rows($rec);
    if($numRows>0) {
        $row = mysql_fetch_array($rec);
        $id = $row["token_id"]; 
    } else {
        $sql = "INSERT INTO tokens SET token='$token'";
        $rec = mysql_query($sql);
        $id = mysql_insert_id();    
    }
    echo $id;
    exit;
}

function getNewToken($q) {

    $sql = "SELECT max(token_id) as token_id FROM tokens";
    $rec = mysql_query($sql);
    $row = mysql_fetch_array($rec);
    $maxToken = $row["token_id"];
    $newToken = $maxToken + 1;

    $newItem = array();
    $new = new stdClass();
    $new->id = "0";
    $new->name = $q;
    $newItem[] = $new;

    return $newItem;    
}
?>
0 голосов
/ 26 декабря 2012

Надеемся, что это скоро будет исправлено в основной ветке Tokeninput, но тем временем объединение этой ветки в ваш собственный форк должно исправить это для вас.

...