0

複数選択検索フィルターに select2 を実装することに決めました。

私は次の方法を持っています:

public function getContactByName($name)
{
    return Contact::select(array('id', DB::raw('concat(first_name," ",last_name) as name')))->where(DB::raw('concat(first_name," ",last_name)'), 'like', "%$name%")->get();
}

このメソッドは、'first_name' と 'last_name' が URL に入力された用語に似ているレコードを返します (例: http://www.example.com/admin/get-contact-name/ {name})。

次のルートがリクエストを処理します。

Route::get('admin/get-contact-name/{name}', 'AdminContactListController@getContactByName');

これはすべてうまくいきます。select2 と AJAX を使用してセットアップするための助けが必要です。JS のオプションに何を入れればよいかよくわかりません。

次のフォーム フィールドの設定があります。

<input name="contact_names_value" type="text" class="input-medium contact_names_value" id="contact_names_value">

誰でも私を正しい方向に向けることができますか?乾杯。

編集:ページなど、これらの各要素の意味がわからないため、ここで遊んで暗闇の中で撮影していますが、これは私がこれまでに持っているコードであり、機能していないと言うだけで十分です:

var name = $('#contact_names_value').val();
$('#contact_names_value').select2({
    placeholder: 'Search contacts',
    minimumInputLength: 3,
    ajax: {
        url: '/admin/get-contact-name' + name,
        dataType: 'json',
        data: function (term, page) {
            return {
                q: term,
                page_limit: 10
            };
        },
        results: function (data, page) {
            return {results: data};
        }
    },
});

編集: わかりました、私はずっと近づいていると思います。現在、select2 を介して結果を取得していると思いますが、JavaScript エラーが発生しています。これが私がこれまでに持っているものです。

方法:

public function getContactByName()
{
    $name = Input::get('name');
    return Contact::select(array('id', DB::raw('concat(first_name," ",last_name) as name')))->where(DB::raw('concat(first_name," ",last_name)'), 'like', "%$name%")->get();
}

ルート:

Route::get('admin/get-contact', 'AdminContactListController@getContactByName');

Select2 JavaScript:

$('#contact_names_value').select2({
    name: $('.select2-input').val(),
    placeholder: 'Search contacts',
    minimumInputLength: 3,
    ajax: {
        url: '/admin/get-contact' + name,
        dataType: 'json',
        data: function (term) {
            return {
                name: term
            };
        },
        results: function (data) {
            return {results: data};
        },
        dropdownCssClass: 'bigdrop'
    },
});

Select2 JS エラー:

Uncaught TypeError: Cannot call method 'toUpperCase' of undefined plugins.js:1549
C plugins.js:1549
a.fn.select2.defaults.formatResult plugins.js:1550
g plugins.js:1549
a.extend.populateResults plugins.js:1549
f.query.callback plugins.js:1549
(anonymous function) plugins.js:1549
a.extend.success plugins.js:1549
c jquery-1.9.1.min.js:3
p.fireWith jquery-1.9.1.min.js:3
k jquery-1.9.1.min.js:5
r

アドバイスはありますか?

4

2 に答える 2

1

OK、私はこれが魅力のように機能しています。

これが私のJSコードです:

$('#contact_names_value').select2({
    placeholder: 'Search contacts',
    minimumInputLength: 3,
    ajax: {
        url: '/admin/get-contact',
        dataType: 'json',
        data: function (term, page) {
            return {
                contact_names_value: term
            };
        },
        results: function (data, page) {
            return {results: data};
        }
    },
    tags: true
});

プラグインがこれを処理し、選択/入力の値をクエリ文字列に追加するため、「name」変数参照は必要ありませんでした。

次に、私のフォームでは、以前はテキストだったので、タイプを「非表示」に設定する必要がありました。

上記で、結果関数とデータ関数の両方に「ページ」を追加したことにも気付くでしょう。これが違いを生んだかどうかはわかりません。

また、「tags: true」を追加して、複数選択のように機能させました。

これが私のメソッドコードです:

public function getContactByName()
{
    $name = Input::get('contact_names_value');
    return Contact::select(array('id', DB::raw('concat(first_name," ",last_name) as text')))->where(DB::raw('concat(first_name," ",last_name)'), 'like', "%$name%")->get();
}

select ステートメントで DB::raw を実行し、'first_name' フィールドと 'last_name' フィールドを 'text' として選択するように設定していることに注意してください。プラグインが機能するには「id」と「text」が必要なため、これが大きな問題の 1 つだったと思います。

私のルートは単純でした:

Route::get('admin/get-contact', 'AdminContactsController@getContactByName');
于 2013-08-12T15:39:07.793 に答える
0

入力ボックスをつかむだけです (たとえば、jQuery を使用して $('#contact_names_value') を実行するか、javascript を document.getElementById('contact_names_value') にすることができます)。

動作するはずの例:

$('#contact_names_value').select2(your_value_from_getContactByName_method_here);

それが役立つことを願っています。

于 2013-08-12T09:32:26.663 に答える