<সलेक्ट> এর মানটি ভাল () ফাংশন সহ সেট করার সময় ট্রিগার পরিবর্তন () ইভেন্ট


132

নির্বাচনের উপাদানগুলির মান নির্ধারণের সময় পরিবর্তন ইভেন্টকে ট্রিগার করার সবচেয়ে সহজ এবং সর্বোত্তম উপায় কী ।

আমি প্রত্যাশা করেছি যে নিম্নলিখিত কোডটি কার্যকর করছে

$('select#some').val(10);

অথবা

$('select#some').attr('value',  10);

পরিবর্তন ইভেন্টটি ট্রিগার করবে, যা আমি মনে করি যে এটি করা বেশ সুন্দর যুক্তিযুক্ত জিনিস। রাইট?

ঠিক আছে, এটি ঘটনা নয়। এটি করে আপনার ট্রিগার চেঞ্জ () ইভেন্টটি করা দরকার

$('select#some').val(10).change();

অথবা

$('select#some').val(10).trigger('change');

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


খাঁটি জাভাস্ক্রিপ্ট এলিমেন্ট.এডএভেন্টলিস্টনার?
ম্যানুয়েল বিট্টো

4
$ ( 'নির্বাচন # কিছু') Val (10) .change ()। ব্যবহারকারীর জন্য বেশ তাত্ক্ষণিক।
দিমিত্রি

@ ম্যানুয়েল আমি এটি চেষ্টা করেছি। iv'e অবজেক্ট.চেঞ্জ = ফাংশন (.... এবং অবজেক্ট.এডডিএভেন্টলিস্টনার (... তবে অবজেক্ট.ভ্যালু, $ (অবজেক্ট) .ভাল () এবং $ (অবজেক্ট) .attr ('মান') ব্যবহার করে না সেই তালিকার সূচনা করবে
গোরান রাদুলোভিচ

উত্তর:


124

আমার একটি খুব অনুরূপ সমস্যা ছিল এবং আমি আপনাকে নিশ্চিত হতে পারি না যে আপনার সাথে কী সমস্যা হচ্ছে কারণ আপনার প্রস্তাবিত কোডটি আমার পক্ষে দুর্দান্ত কাজ করেছে। এটি অবিলম্বে (আপনার একটি প্রয়োজন) নিম্নলিখিত পরিবর্তন কোডটি ট্রিগার করে।

$('#selectField').change(function(){
    if($('#selectField').val() == 'N'){
        $('#secondaryInput').hide();
    } else {
        $('#secondaryInput').show();
}
});

তারপরে আমি ডাটাবেস থেকে মানটি নিয়েছি (এটি নতুন ইনপুট এবং বিদ্যমান রেকর্ড সম্পাদনা করার জন্য একটি ফর্মের জন্য ব্যবহৃত হয়), এটি নির্বাচিত মান হিসাবে সেট করুন এবং উপরের কোডটি ট্রিগার করতে আমি যে টুকুটি অনুপস্থিত ছিল তা যুক্ত করব, "। পরিবর্তন () "।

$('#selectField').val(valueFromDatabase).change();

যাতে ডাটাবেস থেকে বিদ্যমান মান যদি 'এন' হয় তবে তা অবিলম্বে আমার আকারে দ্বিতীয় ইনপুট ক্ষেত্রটি লুকিয়ে রাখে।


এটাই আমার দরকার ছিল। কীভাবে ডম ইভেন্ট ইভেন্ট হ্যান্ডলারগুলিকে গতিশীলভাবে ট্রিগার করতে হয় তার সেরা উপায় কী? JQuery এই ভাল নথি না? ধন্যবাদ!
কন আন্তোনাকোস

2
$ ("# ছাড়_প্রকার")। ওভাল (2)। ট্রিগার ('পরিবর্তন');
শয়তানন্দ তিওয়ারি

$ ( '# add_itp_spt_parent_id') Val (add_fpt_val) .trigger ( 'পরিবর্তন')। $ ( '# add_itp_spt_parent_id') পরিবর্তন ()। উভয় সমাধান কাজ করছে না।
কমলেশ

আপনি ব্যবহার করছেন আগে সংজ্ঞায়িত পরিবর্তন ফাংশন, আমার সমস্যা সমাধান করুন। ধন্যবাদ।
কমলেশ

45

একটি জিনিস যা আমি খুঁজে পেলাম (শক্ত উপায়) তা হ'ল আপনার উচিত

$('#selectField').change(function(){
  // some content ...
});

আপনি ব্যবহার করছেন আগে সংজ্ঞায়িত

$('#selectField').val(10).trigger('change');

অথবা

 $('#selectField').val(10).change();

4
পুরানো পোস্ট তবে এটি আমার সমস্যার সমাধান করেছে, দীর্ঘ বাতাসযুক্ত মস্তিষ্কের ক্র্যাকিং থেকে আমাকে বাঁচিয়েছে ... এটি ব্যবহারের আগে আপনাকে অবশ্যই শ্রোতার সংজ্ঞা দিতে হবে। এমনকি খাঁটি জাভাস্ক্রিপ্টে।
টেমিটায়ো

আপনি কি একটু বিস্তারিত বলতে পারেন? "পরিবর্তন ()" কি এই কারণে নেই?
ডিমা আর

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

1
এই আমার প্রয়োজন ছিল। ধন্যবাদ, এই সমস্যাটি সমাধান করার জন্য আমাকে চিরকাল ধরে নিয়ে গেলেন।
জেমি এম।

সাবাস !!! "আপনি ব্যবহার করার আগে সংজ্ঞায়িত পরিবর্তন ফাংশন", আমার সমস্যার সমাধান করে। ধন্যবাদ বন্ধু.
কমলেশ 25'19

17

সরাসরি উত্তরটি ইতিমধ্যে একটি সদৃশ প্রশ্নের মধ্যে রয়েছে: আমি যখন ভাল () ব্যবহার করে একটি নির্বাচনের মান সেট করি তখন কেন জিকুরি পরিবর্তন ইভেন্টটি ট্রিগার করে না?

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

আপনি যদি সত্যিই এটি করতে চান তবে আমার অনুমানের একমাত্র উপায় হ'ল একটি ফাংশন লিখুন যা একটি অন্তরালে ডোম পরীক্ষা করে এবং পরিবর্তিত মানগুলি ট্র্যাক করে, তবে অবশ্যই আপনাকে অবশ্যই এটি করা উচিত না যদি না আপনি নিশ্চিত হন না (কেন আপনাকে কখনও প্রয়োজন হবে না)

এই সমাধানটি যুক্ত করা হয়েছে:
আর একটি সম্ভাব্য সমাধান .val()হ'ল আপনার নিজের মোড়ক ফাংশন তৈরি করা এবং এটির মাধ্যমে মান নির্ধারণের পরে এটি একটি কাস্টম ইভেন্ট ট্রিগার করা হবে .val(), তারপরে আপনি যখন আপনার .val () র‌্যাপারটি কোনও মান নির্ধারণ করার জন্য ব্যবহার করেন <select>এটি আপনার কাস্টম ইভেন্টটিকে ট্রিগার করবে will যা আপনি আটকাতে এবং পরিচালনা করতে পারেন।

নিশ্চিত হন return this, তাই এটি jQuery ফ্যাশনে শৃঙ্খলযোগ্য


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

সারাক্ষণ $('select').val(value).change()কাজ করবে না কেন ? কোন স্পষ্ট ব্যাখ্যা?
ইসতিয়াক আহমেদ

2

আমি এটি আলাদা করি এবং তারপরে যা হয় তা নির্ধারণের জন্য একটি পরিচয় তুলনা ব্যবহার করি।

$("#selectField").change(function(){
  if(this.value === 'textValue1'){ $(".contentClass1").fadeIn(); }
  if(this.value === 'textValue2'){ $(".contentclass2").fadeIn(); }
});

2

যেহেতু jQuery স্থানীয় পরিবর্তন ইভেন্টকে ট্রিগার করবে না তবে কেবল তার নিজস্ব পরিবর্তন ইভেন্টটি ট্রিগার করে। আপনি যদি jQuery ব্যতীত ইভেন্টটিকে বাঁধেন এবং তারপরে jQuery ব্যবহার করে এটি কল করতে ব্যাক করেছেন যা আপনি আবদ্ধ করেছেন!

সমাধানটি নীচের মতো (100% কার্যকারী):

var sortBySelect = document.querySelector("select.your-class"); 
sortBySelect.value = "new value"; 
sortBySelect.dispatchEvent(new Event("change"));
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.