【问题标题】:passing a variable to .html() function将变量传递给 .html() 函数
【发布时间】:2014-11-06 16:39:01
【问题描述】:
     <!-- 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>

事件变量未定义。

例如,如果我这样做:var event = 'hello' 它会按预期输出“你好”。

所以问题似乎出在这部分:events[this.selectedIndex];。我做错了什么?

我对此真的很陌生。非常感谢您的帮助!!

更新
控制台输出(在 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"
    }
}

【问题讨论】:

  • 也许使用 $(this).val() 而不是 this.selectedIndex
  • 你能给出这段代码sn-p的客户端版本吗? .... 在您的浏览器 (HTML) 中呈现。
  • Events 不是布尔值 if (events.length > 0 && events!='null')
  • 但它运行脚本。 if (events) 运行是因为它确实输出了我给 var event 的值。
  • 您确定events 数组中有值吗?你能通过console.log(events); 来检查一下吗?

标签: javascript jquery


【解决方案1】:

要获取select 元素的值,请使用this.value。从而改变:

var event = events[this.selectedIndex];

收件人:

var event = events[this.value];

但是,如果您的 json 是索引为 0,1,2,3,4 的数组,而不是选项值为 keys 的对象,那么您对 ​​this.selectedIndex 的使用是正确的。

更新

根据发布的示例 JSON,正确的代码应该是:

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

特别说明

您可以使用以下任一方法获取所有事件数据:

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

或者你可以构建你想要的样子:

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

【讨论】:

  • 这不会给我任何错误,但也没有输出。
  • this.value 跨浏览器是一致的;这是非常基本的js。
  • 好的!那么问题必须在我的代码中的其他地方,因为我相信你没有收到任何错误! :)
  • 你能从你正在使用的 json 中发布一个 sn-p。
  • 查看新的更新,它会为您提供有关如何访问其余信息的线索。
【解决方案2】:

有关访问selectedIndex 属性的jQuery 方式,请参见this answer。您的答案可能如下所示:

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

【讨论】:

  • 谢谢你已经在帮助!现在我知道这没有定义:Uncaught ReferenceError: $this is not defined
【解决方案3】:

首先,您不需要 2 个现成的实例。试试吧,如果不行请告诉我。

<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>

selectedIndex 是什么意思?

【讨论】:

  • 我没有收到任何错误,但也没有输出。我感觉要在其他地方搜索错误!感谢您的努力!
  • 您可以尝试获取类似 $(this).val() 的值,也可以在元素#select-event-type 中添加属性数据。示例:。所以你可以访问 $(this).attr("data-index")。拥抱!
猜你喜欢
  • 2020-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-02
  • 2011-01-18
  • 2015-05-02
  • 2015-12-17
相关资源
最近更新 更多