আমি কীভাবে জেকিগ্রিডের সাথে সিলেক্ট 2 ড্রপডাউনের নির্বাচিত মান পরিবর্তন করব?


178

আমি ওলেগের সিলেক্ট 2 ডেমো ব্যবহার করছি তবে আমি অবাক হয়ে যাচ্ছি যে ড্রপডাউন মেনুতে বর্তমানে নির্বাচিত মানটি পরিবর্তন করা সম্ভব হবে কিনা।

উদাহরণস্বরূপ, যদি লোড হওয়া চারটি মানগুলি: "Any", "Fruit", "Vegetable", "Meat"এবং ড্রপডাউন তালিকার ডিফল্ট হয় "Any", তবে আমি কীভাবে "Fruit"জেকিগ্রিড ইভেন্টে এটি পরিবর্তন করতে সক্ষম হব loadComplete?

এটা কি সম্ভব?

উত্তর:


407

সিলেক্ট 2 সংস্করণ> = 4.0.0 এর জন্য

অন্যান্য সমাধানগুলি কাজ নাও করতে পারে, তবে নিম্নলিখিত উদাহরণগুলিতে কাজ করা উচিত।

সমাধান 1: সমস্ত সংযুক্ত পরিবর্তনের ইভেন্টগুলিকে সিলেক্ট 2 সহ ট্রিগার করতে কারণ দেয়

$('select').val('1').trigger('change');

সমাধান 2: JUST সিলেক্ট 2 পরিবর্তন ইভেন্টকে ট্রিগার করতে পারে

$('select').val('1').trigger('change.select2');

এর উদাহরণগুলির জন্য এই jsfiddle দেখুন । সমাধান 2 এর জন্য @ মিন্যালারে ধন্যবাদ।

ব্যাখ্যা:

বলুন মানুষের নাম সহ আমার একটি সেরা বন্ধু নির্বাচন করুন। সুতরাং বব, বিল এবং জন (উদাহরণ হিসাবে আমি ধরে নিচ্ছি মানটি নামের মতো)। প্রথমে আমি আমার নির্বাচনের মাধ্যমে সিলেক্ট 2 শুরু করি:

$('#my-best-friend').select2();

এখন আমি ম্যানুয়ালি ব্রাউজারে বব নির্বাচন করুন। পরবর্তী বব দুষ্টু কিছু করে এবং আমি তাকে আর পছন্দ করি না। সুতরাং সিস্টেমটি আমার জন্য বব নির্বাচন করে:

$('#my-best-friend').val('').trigger('change');

বা বলুন যে আমি সিস্টেমটিকে ববটির পরিবর্তে তালিকার পরবর্তীটি নির্বাচন করব:

// I have assume you can write code to select the next guy in the list
$('#my-best-friend').val('Bill').trigger('change');  

সিলেক্ট 2 ওয়েবসাইটে নোটগুলি ( অবচয় এবং অপসারণের পদ্ধতিগুলি দেখুন ) যা অন্যদের জন্য কার্যকর হতে পারে:

.select2 ('val') "ভাল" পদ্ধতি অবমূল্যায়ন করা হয়েছে এবং সিলেক্ট ৪.১-এ সরানো হবে। অবহেলিত পদ্ধতিতে আর ট্রিগার চেঞ্জ প্যারামিটার অন্তর্ভুক্ত নেই।

পরিবর্তে অন্তর্নিহিত উপাদানটিতে আপনার সরাসরি .val কল করা উচিত। আপনার যদি দ্বিতীয় প্যারামিটারের প্রয়োজন হয় (ট্রিগার চেঞ্জ), তবে আপনাকে উপাদানটিতে .trigger ("পরিবর্তন") কল করতে হবে।

$('select').val('1').trigger('change'); // instead of $('select').select2('val', '1');

8
এটি সঠিক উত্তর: এটি মনো-সিলেক্ট এবং বহু-নির্বাচন উভয় ক্ষেত্রেই কাজ করে
জিওভান্নি মিলিয়া

4
এটি কেবলমাত্র যদি গ্রহণযোগ্য সমাধান হয় তবে কারও কাছে changeইভেন্টটির সাথে কোনও কাস্টম ক্রিয়াকলাপ বাঁধা না থাকে (ফর্মটি পুনরায় লোড করার মতো)। অন্যথায় এই ক্রিয়াকলাপগুলি ট্রিগারযুক্ত হওয়ার পরে রিডোনজেন্টলি বলা হবে change()
ভ্যান_ফোলমার্ট

এটি যদি সঠিকভাবে কাজ না করে তবে একটি সেট টাইমআউট যুক্ত করুন: সেটটাইমআউট (ফাংশন () {$ ("নির্বাচন করুন")। ভাল ("1")। ট্রিগার ("পরিবর্তন");}, 1000);
হাবেল

@ ওয়ান_ফোলমার্ট আমার একই সমস্যা আছে। আদর্শভাবে, আমি কোনও ইভেন্ট না চালিয়ে বাছাই করা হিসাবে যা কিছু দেখানো হয়েছে তা পরিবর্তন করতে চাই (যেহেতু আমার একটি কাস্টম আবদ্ধ আছে onChange)
ওব্রী

1
@ ওয়ান_ফোলমার্ট সমস্যা কীভাবে সমাধান করা যায় তার উদাহরণের জন্য নীচে আমার উত্তরটি দেখুন
11.31 মিনিয়ারে

135

মানটি পেতে / সেট করতে আপনি নীচেরটি নির্বাচন করুন 2 নির্বাচন করুন doc

$("#select").select2("val"); //get the value
$("#select").select2("val", "CA"); //set the value

@ পাইপাইপস নির্দেশ করেছে যে এটি 4.x এর পরিবর্তিত হয়েছে (তাকে নীচে একটি উত্সাহিত টস করুন)। valএখন সরাসরি বলা হয়

$("#select").val("CA");

সুতরাং loadCompletejqGrid এর মধ্যে আপনি যে মানটি সন্ধান করছেন তা পেতে পারেন তারপরে নির্বাচনবক্স মানটি সেট করুন।

দস্তাবেজগুলি থেকে বিজ্ঞপ্তি

লক্ষ্য করুন যে এই পদ্ধতিটি ব্যবহার করার জন্য আপনাকে অবশ্যই অপশনগুলিতে initSeration ফাংশনটি সংজ্ঞায়িত করতে হবে সুতরাং নির্বাচন 2 জেনে নিন যে আপনি ভাল () তে পাস করা অবজেক্টের আইডিটি কীভাবে পূর্ণ রচনা নির্বাচন করতে হবে তা রূপান্তর করতে হবে it আপনি যদি কোনও নির্বাচিত উপাদানকে সংযুক্ত করছেন তবে এই ফাংশনটি ইতিমধ্যে আপনার জন্য সরবরাহ করা হয়েছে।


আমি যে ডেমোটি দেখছি তার সাথে কাজ করার জন্য উপস্থিত হয় না। কেন নিশ্চিত না, এটি জেকিগ্রিডে যেভাবে প্লাগ ইন করে তার সাথে এটি করার কিছু হতে পারে।
আদম কে ডিন

1
উত্তর আপডেট করেছেন। দেখে মনে হচ্ছে যে আপনাকে ম্যানুয়ালি সেই ফাংশনটি সিলেক্ট 2 ইনিশিয়ালেশনে যুক্ত করতে হবে যাতে valকলটি কীভাবে পরিচালনা করতে হয় তা এটি জানে ।
জ্যাক

1
@AdamKDean এক অতিরিক্ত কিনা পরীক্ষা করতে পারেন <select>যেখানে রূপান্তরিত select2ক্লাসের existense পরীক্ষার দ্বারা নিয়ন্ত্রণ select2-offscreenউপর <select>। অনুসন্ধান সরঞ্জামদণ্ডের সমস্ত উপাদানগুলির আইডি রয়েছে যা gs_উপসর্গ দিয়ে শুরু হয় এবং নামটির মতো থাকে colModel। আপনি পেতে ব্যবহার getGridParamকরতে পারেন colModel
ওলেগ

ধন্যবাদ, আমি ফিল্টার তথ্য পেতে পরিচালিত করেছি, ফিল্টার বারটি select2নির্বাচন করে পুনরায় তৈরি করার পরে এটি সেট করার আমার একটি উপায় দরকার । আমি আজ অন্য চেহারা নেব, সম্ভবত তাজা চোখ দিয়ে আমি এটি ঠিক করতে পারি। আবার ধন্যবাদ. আপডেট: কোডটি একটি বুলিয়ান চেকের মধ্যে মুড়িয়ে দেওয়ার ফলে আমার যে সমস্যাটি ছিল তা স্থির হয়েছে, যদিও এটি পূর্ববর্তী উপাদানটি আবার বাছাইয়ের পরিবর্তে অনুসন্ধান বারকে সতেজ করা বন্ধ করে দিয়েছে।
আদম কে ডিন



18

এটি আরও সহজ হওয়া উচিত।

$("#e1").select2("val", ["View" ,"Modify"]);

তবে নিশ্চিত হয়ে নিন যে আপনি যে মানগুলি পাস করেছেন সেগুলি ইতিমধ্যে এইচটিএমএলে উপস্থিত রয়েছে


17

আপনি যদি নতুন যুক্ত করতে চান value='newValue'এবং text='newLabel', আপনার এই কোডটি যুক্ত করা উচিত:

  1. এতে নতুন বিকল্প যুক্ত করুন <select>:

    var opt = "<option value='newValue' selected ='selected'>" + newLabel+ " </option>";
    $(selLocationID).html(opt);
  2. <select>নির্বাচিত মানটিতে ট্রিগার পরিবর্তন:

    $(selLocationID).val('newValue').trigger("change");

আমি সিলেক্ট 2 'ডেটা' এর সাথে জগাখিচির চেয়ে এই ক্লিনারটি খুঁজে পাচ্ছি :) ডোম পরিবর্তন করুন, সিলেক্ট 2 কে বাকিটা খুঁজে বের করুন।
পৌল

আমি সাফারি পরীক্ষা করছি, এবং এটিই একমাত্র সমাধান যা আসলে কাজ করে। অন্যরা আরও বুদ্ধিমান এবং আমি তাদের পছন্দ করি তবে কোনও কিছুর চেয়ে বেশি আমি কাজের কোড পছন্দ করি। এবং এই যে। :)
ডেভিড

এক মিলিয়ন এর জন্য ধন্যবাদ! আমি নির্বাচিত দুটি বাক্সের সাথে কাজ করছি যেখানে উভয় বাক্সই আজাক্সের সাথে জনবহুল এবং আমি এটি ব্যবহার করে দ্বিতীয়টির মান সেট করার জন্য প্রথম বাক্সের জন্য অতিরিক্ত ডেটা বৈশিষ্ট্য ব্যবহার করেছি। আবারো তোমাকে ধন্যবাদ!!!!
স্যাম

16

শুধু একটি দ্বিতীয় উত্তর যুক্ত করতে চেয়েছিলেন। আপনি যদি ইতোমধ্যে একটি বাছাই করে বাছাই করে থাকেন 2 , আপনার নির্বাচিতকে নিম্নলিখিত হিসাবে প্রতিফলিত হওয়া দরকার:

$("#s2id_originalSelectId").select2("val", "value to select");

12

আপনার দুটি বিকল্প রয়েছে - @ জলপাইপের উত্তর অনুসারে আপনি নিম্নলিখিতটি করতে পারেন।

$(element).val(val).trigger('change');

পরিবর্তিত ইভেন্টের সাথে যদি কোনও কাস্টম ক্রিয়াকে আবদ্ধ না করে তবেই এটি একটি গ্রহণযোগ্য সমাধান। এই পরিস্থিতিতে আমি যে সমাধানটি ব্যবহার করি তা হ'ল একটি সিলেক্ট 2 সুনির্দিষ্ট ইভেন্টকে ট্রিগার করা যা সিলেক্ট 2 প্রদর্শিত নির্বাচনের আপডেট করে।

$(element).val(val).trigger('change.select2');

হ্যাঁ, এটি সর্বকালের সেরা সমাধান। সত্যই, আমি মনে করি সিলেক্ট 2 এর মান পরিবর্তিত হলে ডিসপ্লে আপডেট করার জন্য স্বয়ংক্রিয়ভাবে অভ্যন্তরীণ 'চেঞ্জ.সलेक्ट 2' ইভেন্টটি ট্রিগার করা উচিত। তবে, এটি কাস্টম পরিবর্তন ইভেন্ট হ্যান্ডলারদের ট্রিগার না করেই কমপক্ষে নতুন মানটির সাথে মিলের জন্য ডিসপ্লে আপডেট করার সহজ উপায় সরবরাহ করে।
ডেভইনমেন

এই '$ (উপাদান)। ওভেল (ভাল)। ট্রিগার (' চেঞ্জ.সलेक्ट 2 ');' আমার জন্য কাজ। আপনাকে ধন্যবাদ @ মিন্লারে
রায়

9

একটি স্ট্রিং বিকল্পটি একটি সিলেক্ট 2 এ নির্বাচিত করতে কিছু সমস্যা হচ্ছে:

বিকল্পটির সাথে: "বিকল্প স্ট্রিং 1 / বিকল্প" ব্যবহৃত:

$('#select').val("string1").change(); 

একটি মান সহ একটি বিকল্পের সাথে বাট করুন: বিকল্প মান "E" স্ট্রিং 1 / বিকল্প:

$('#select').val("E").change(); // you must enter the Value instead of the string

আশা করি এটি একই সমস্যার সাথে লড়াই করা কাউকে সহায়তা করে।


5

আপনি যদি একক মান নির্বাচন করতে চান তবে ব্যবহার করুন $('#select').val(1).change()

আপনি যদি একাধিক মান নির্বাচন করতে চান তবে অ্যারেতে মান সেট করুন যাতে আপনি এই কোডটি ব্যবহার করতে পারেন $('#select').val([1,2,3]).change()


আপনি বর্গাকার বন্ধনীগুলির নীচে স্ট্রিং প্রবেশ করলে এটি কাজ করবে না।
উত্কর্ষ পান্ডে

5

ভি 4 সিলেক্ট 2 এর জন্য আপনি যদি সিলেক্ট 2 এর মান এবং ড্রপ ডাউনের পাঠ্য উপস্থাপনা উভয়ই পরিবর্তন করতে চান।

var intValueOfFruit = 1;
var selectOption = new Option("Fruit", intValueOfFruit, true, true);
$('#select').append(selectOption).trigger('change');

এটি কেবল পর্দার পিছনে মানটিই নয় নির্বাচন করুন 2 এর জন্য পাঠ্য প্রদর্শনও সেট করবে।

Https://select2.github.io/announcements-4.0.html#removed- পদ্ধতিগুলি থেকে তোলা


ট্রিগার করার চেষ্টা করুন ('চেঞ্জ.সलेक्ट 2')। ট্রিগার ('সিলেক্ট 2: সিলেক্ট'); যদি কেবল পরিবর্তনই যথেষ্ট না
তেব

4

আমার প্রত্যাশিত কোড:

$('#my-select').val('').change();

নিখুঁতভাবে কাজ করা ব্যবহারকারীর জন্য @ পানপাইপসকে ধন্যবাদ জানায়।


4

এটা কর

 $('select#id').val(selectYear).select2();

এই কোডটি প্রশ্নের উত্তর দিতে পারে, কেন এবং / অথবা এই কোডটির প্রশ্নের উত্তর কীভাবে তার দীর্ঘমেয়াদী মানকে উন্নত করে সে সম্পর্কে অতিরিক্ত প্রসঙ্গ সরবরাহ করে।
রোলস্টুহফলাহার

জেকিগ্রিড সম্পর্কে আমার জ্ঞান নেই তবে এই কোডের সাহায্যে আপনি সিলেক্ট 2 মানটি সহজ উপায়ে পরিবর্তন করতে পারেন
জাস্করণ সিংহ রাজাল

2

আপনার যদি অজ্যাক্স ডেটা উত্স থাকে তবে দয়া করে এটি বিনামূল্যে বাগের জন্য উল্লেখ করুন

https://select2.org/programmatic-control/add-select-clear-items

// নির্বাচন 2 নিয়ন্ত্রণ সেট আপ করুন

$('#mySelect2').select2({
    ajax: {
        url: '/api/students'
    }
});

// পূর্বনির্ধারিত আইটেমটি আনুন এবং নিয়ন্ত্রণে যুক্ত করুন

var studentSelect = $('#mySelect2');
$.ajax({
    type: 'GET',
    url: '/api/students/s/' + studentId
}).then(function (data) {
    // create the option and append to Select2
    var option = new Option(data.full_name, data.id, true, true);
    studentSelect.append(option).trigger('change');

    // manually trigger the `select2:select` event
    studentSelect.trigger({
        type: 'select2:select',
        params: {
            data: data
        }
    });
});

1

আপনি যদি ড্রপ ডাউন তালিকা থেকে পাঠ্যটি জানেন এবং মানটি জানেন না এমন সময় আপনি যদি একটি নির্বাচিত আইটেম সেট করতে চান তবে এখানে একটি উদাহরণ রয়েছে:

বলুন যে আপনি একটি সময় অঞ্চল নির্ধারণ করেছেন time_zone_idএবং সেট করতে চান তবে তাদের মধ্যে মান রয়েছে ।

        var timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;
        var $select2 = $('#time-zone');
        var selected = $select2.find("option:contains('"+timeZone+"')").val();
        $select2.val(selected).trigger('change.select2'); 

0
// Set up the Select2 control
$('#mySelect2').select2({
    ajax: {
        url: '/api/students'
    }
});

// Fetch the preselected item, and add to the control
var studentSelect = $('#mySelect2');
$.ajax({
    type: 'GET',
    url: '/api/students/s/' + studentId
}).then(function (data) {
    // create the option and append to Select2
    var option = new Option(data.full_name, data.id, true, true);
    studentSelect.append(option).trigger('change');

    // manually trigger the `select2:select` event
    studentSelect.trigger({
        type: 'select2:select',
        params: {
            data: data
        }
    });
});

হরফ: 2 ডকুমেন্টেশন নির্বাচন করুন


0

আপনি মান সেট করার জন্য সহজভাবে গেট / সেট পদ্ধতিটি ব্যবহার করতে পারেন

$("#select").select2("val"); //get the value
$("#select").select2("val", "CA"); //set the value

অথবা আপনি এটি করতে পারেন:

$('#select').val("E").change(); // you must enter the Value instead of the string
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.