Щебетать typahead.js при нажатии клавиши ввода, аналогично нажатию - PullRequest
0 голосов
/ 22 октября 2018
//search
 jQuery(document).ready(function($) {
            // Set the Options for "Bloodhound" suggestion engine
            var engine = new Bloodhound({
                prefetch: {
                    url: '/search',
                },
                remote: {
                    url: '/find?q=%QUERY%',
                    wildcard: '%QUERY%'
                },
                datumTokenizer: Bloodhound.tokenizers.whitespace('q'),
                queryTokenizer: Bloodhound.tokenizers.whitespace
            });
            $(".search-input").typeahead({
                hint: true,
                highlight: true,
                minLength: 1
            }, {
                source: engine.ttAdapter(),
                name: 'searchresult',
                display: 'name', //what to display 
                templates: {
                    empty: [
                        '<div class="list-group search-results-dropdown"><div class="list-group-item">Nothing found.</div></div>'
                    ],
                    header: [
                        '<div class="list-group search-results-dropdown">'
                    ],
                    suggestion: function (data) {
                        return '<a href="/courses/' + data.slug + '" class="list-group-item">' + data.name + '</a>'
                    }
                }
            }).on('keyup', this, function (event) {
        if (event.keyCode == 13) {
          var a = this.value;
          a = string_to_slug(a);
          $.ajax({
                url: "{{url('getCourse')}}",
                data: 
                {'slug':a,
                    "_token": "{{ csrf_token() }}"}, 
                type: "POST",
                success: function (data) {
                    console.log(data);
                    if (data.slug === undefined) {
                    }else{
                    window.location.href = "/courses/" + data.slug ;
                    }
                },
                error: function (xhr, ajaxOptions, thrownError) {

                },
                complete: function () {

                }
            });





        }
    });

        });

форма

  <form>
      <div class="input-group">
          <input type="text" class="form-control search-input" placeholder="Search...">
      </div>
  </form>


function string_to_slug (str) {
    str = str.replace(/^\s+|\s+$/g, ''); // trim
    str = str.toLowerCase();

    // remove accents, swap ñ for n, etc
    var from = "àáäâèéëêìíïîòóöôùúüûñç·/_,:;";
    var to   = "aaaaeeeeiiiioooouuuunc------";
    for (var i=0, l=from.length ; i<l ; i++) {
        str = str.replace(new RegExp(from.charAt(i), 'g'), to.charAt(i));
    }

    str = str.replace(/[^a-z0-9 -]/g, '') // remove invalid chars
        .replace(/\s+/g, '-') // collapse whitespace and replace by -
        .replace(/-+/g, '-'); // collapse dashes

    return str;
}

Любая другая опция, чтобы сделать то же самое. Я пытался использовать невидимую кнопку отправки, но все еще не работает. Аякс занимает много времени, чтобы выполнить задачу.Предположение, что я взял значение из database.but, в случае нажатия клавиши ввода, я не получил это значение. Поэтому я использую метод slugify, чтобы сделать кусок данных, который у меня есть. Но мне нужно получить значение, полученное из базы данных в виде ссылки ине используйте ajax для этого и используйте это при нажатии клавиши ввода

...