简体   繁体   中英

passing a variable to .html() function

     <!-- The select drop down menu (works fine) -->
     <select id="select-event-type">
        <?php foreach ($this->events as $event) {
            echo "<option value='" .$event->event_id. "'>" .$event->event_title."</option>";
        }?>
     </select>

     <!-- The javascript, which is supposed to output something according to the chosen option in the select drop down -->
     <script>
          (function ($) {
              var events = <?php echo (count($this->events) > 0) ? json_encode($this->events) : "null"; ?>;
              $(document).ready(function() {
                  $('#select-event-type').change(function() {
                      if (events) {
                          var event = events[this.selectedIndex];
                          $('#event-details').html(event);
                      }
                  });
              });
          })($);
     </script>

 <!-- In this div the output will be displayed -->
<div id="event-details"></div>

The event variable undefined.

If I for example do this: var event = 'hello' It does output 'hello' as it is supposed to.

So the problem seems to be with this part: events[this.selectedIndex]; . What did I do wrong?

I am really new to this. Thank you so much for your help!!

UPDATE :
Console output (in chrome):

     <script>
          (function ($) {
              var events = JSON.parse({"1":{"event_id":"1","event_title":"event1","event_desc":"event1","event_location":"eventlocation","event_requirements":"event1","event_date":"2022-07-20 15:00:00"},"2":{"event_id":"2","event_title":"event2","event_desc":"event2","event_location":"eventlocation","event_requirements":"event2","event_date":"2015-04-20 15:00:00"},"3":{"event_id":"3","event_title":"event3","event_desc":"event3","event_location":"eventlocation","event_requirements":"event3","event_date":"2019-11-20 16:00:00"}});               $(document).ready(function() {
                    $('#select-event-type').change(function() {
             if (events) {
                 var event = events[$(this).selectedIndex];
                 $('#event-details').html(event);
              }
           });
        });

    </script>

JSON :

{
    "1": {
        "event_id": "1",
        "event_title": "event1",
        "event_desc": "event1",
        "event_location": "eventlocation",
        "event_requirements": "event1",
        "event_date": "2022-07-20 15:00:00"
    },
    "2": {
        "event_id": "2",
        "event_title": "event2",
        "event_desc": "event2",
        "event_location": "eventlocation",
        "event_requirements": "event2",
        "event_date": "2015-04-20 15:00:00"
    },
    "3": {
        "event_id": "3",
        "event_title": "event3",
        "event_desc": "event3",
        "event_location": "eventlocation",
        "event_requirements": "event3",
        "event_date": "2019-11-20 16:00:00"
    }
}

See this answer for the jQuery way of accessing the selectedIndex property. Your answer might look like:

var event = events[$(this).prop("selectedIndex")];

To get the value of the select element use this.value . Thus change:

var event = events[this.selectedIndex];

To:

var event = events[this.value];

However, if you json is an array with indices 0,1,2,3,4 rather than an object with option values as keys then your use of this.selectedIndex is correct.

UPDATE :

In the light of the sample JSON posted the correct code should be:

var event = events[this.selectedIndex + 1].event_title;

Special Note

You can get all the event data by using either:

var event = JSON.stringify( events[this.selectedIndex + 1] ); //gives you a string of everything

Or you could construct how you want it to look like so:

var event = $('<div/>');
$.each( events[this.selectedIndex + 1], function(k,v) {
    event.append( $('<div/>',{text:k + ': ' + v}) );
});

Firstly you dont need the 2 ready instances. Try to do it, if dont work please tell me.

<script>
   $(document).ready(function() {
     var events = <?php echo (count($this->events) > 0) ? json_encode($this->events) : "null"; ?>;
      $('#select-event-type').change(function() {
         if (events) {
             var event = events[$(this).selectedIndex];
             $('#event-details').html(event);
          }
       });
    });

</script>

and what means the selectedIndex ?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM