प्रोग्रामेटिक रूप से पॉप्युलेट किए गए ड्रॉपडाउन परिवर्तन इवेंट पर Jquery ट्रिगर नहीं होता है


नमस्ते,

मेरे पास दो ड्रॉपडाउन बॉक्स प्रोग्राम और कोर्स हैं, प्रोग्राम ड्रॉपडाउन प्रोग्रामेटिक रूप से पॉप्युलेट होता है और मैं चाहता हूं कि जब इसे दूसरे शब्दों में एक वैल्यू मिलती है, जब इसका मूल्य बदल जाता है तो कोर्स ड्रॉपडाउन को प्रोग्राम वैल्यू के आधार पर पॉप्युलेट करने की आवश्यकता होती है लेकिन यह तब तक काम नहीं करता जब तक मैं नहीं बदलता प्रोग्राम ड्रॉपडाउन मान को चुनकर और बदलकर।

कृपया मदद करे।

मैंने क्या प्रयास किया है:

पीएचपी
<div class="form-group">
                    <label for="program">Program</label>
                    <select class="form-control" name="programid" id="programid" required>
                      <option value="">Select Program</option>
                      <?php foreach($programs as $obj) { ?>
                        <option value="<?=$obj['programid'] ?>" <?php if($row['programid'] == $obj['programid']) { ?> selected <?php } ?> ><?=$obj['program'] ?></option>
                        <?php } ?>
                    </select>
                  </div>
                  <div class="form-group">
                    <label for="course">Course</label>
                    <select class="form-control" name="courseid" id="courseid" required>
                    </select>
                  </div>
जावास्क्रिप्ट
$(function () {
$('#programid').change(function() {
      var semesterid = $('#semesterid').val();
      var programid = $(this).val();
      var courseid = null;
      <?php if($row['courseid'] != null && !empty($row['courseid'])) { ?> courseid = <?php echo $row['courseid']; }  ?>       
      $.ajax({
        url : "<?=site_url('get_courses');?>",
                    method : "POST",
                    data : {programid: programid, semesterid : semesterid},
                    async : true,
                    dataType : 'json',
                    success: function(data){                       
                        var html = '<option value="">Select Course</option>';
                        var i;
                        for(i=0; i<data.length; i++){
                            if(data[i].courseid == courseid)
                            {
                                html += '<option value='+data[i].courseid+' selected>'+data[i].course+'</option>';
                            }
                            else
                            {
                            html += '<option value='+data[i].courseid+'>'+data[i].course+'</option>';
                            }
                        }
                        $('#courseid').html(html);

                    }
      })
    });
});

समाधान 1

आश्चर्य की बात नहीं, change घटना आग जब चयनित मान बदला जाता है. यह नहीं करता जब पृष्ठ पहली बार लोड हो तो सक्रिय करें।

आप या तो मैन्युअल रूप से ट्रिगर कर सकते हैं change पृष्ठ लोड होने पर घटना:

जावास्क्रिप्ट
$('#programid').change(function() {
    ...
}).trigger("change");

.ट्रिगर() | jQuery एपीआई दस्तावेज़ीकरण[^]

या आप हैंडलर को उसके स्वयं के फ़ंक्शन में निकाल सकते हैं, और पृष्ठ लोड होने पर उसे स्पष्ट रूप से कॉल कर सकते हैं:

जावास्क्रिप्ट
$(function(){
    let selectedCourseId = null;
    <?php if($row['courseid'] != null && !empty($row['courseid'])) { ?> selectedCourseId = <?php echo $row['courseid']; }  ?>
    
    const updateCourses = function(){
        const semesterid = $('#semesterid').val();
        const programid = $(this).val();
        const courseId = selectedCourseId;
        $.ajax({
            ...
        });
    };
    
    $('#semesterid').change(updateCourses);
    $('#programid').change(updateCourses);
    updateCourses();
});

यह दृष्टिकोण आपको एक ही हैंडलर को कई तत्वों में कई घटनाओं से जोड़ने की अनुमति देता है – उदाहरण के लिए, इस मामले में, change सेमेस्टर सूची पर घटना.

コメント

タイトルとURLをコピーしました