更改“src'”后,图片不会刷新。属性

时间:2015-07-10 12:05:48

标签: javascript jquery html

我想从菜单中选择另一个项目后刷新图像:

<html>
  <head>
    <link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
    <script src="//code.jquery.com/jquery-1.10.2.js"></script>
    <script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
    <script>

    $(function() {
      $( "#selectable" ).selectable({
        stop: function() {
          $( ".ui-selected", this ).each(function() {
            // Works on FF; doesn't work on Chrome and IE
            d = new Date();
            $("#chart_image").prop("src", this.id + "?" + d.getTime());
          });
        }
      });
    });

    $(function() {
      // Selects the first <li> element
      $( "#selectable" ).selectable().children().first().addClass('ui-selected');
    });

    </script>

  </head>
  <body>
    <?php

      header('Cache-Control: no-cache, no-store, must-revalidate');
      header('Pragma: no-cache');
      header('Expires: 0');

      $dirname = "charts/";
      $images = glob($dirname."*.svg");

      echo '<ol id="selectable">';
      foreach($images as $image) {
        echo '<li class="ui-widget-content" id="'.$image.'">'.basename($image, ".svg").'</li>';
      }
      echo '</ol>';

      echo '<figure><embed id="chart_image" type="image/svg+xml" src="'.$images[0].'"></embed></figure>';
    ?>
  </body>
</html>

以上代码适用于FF。但是,在Chrome和IE上,选择不同的菜单项后没有任何反应。我尝试了将当前时间戳附加到文件末尾的技巧。我也试过缓存标题 - 没有结果。

谢谢!

3 个答案:

答案 0 :(得分:2)

所以,问题似乎是embed类型 type="image/svg+xml" Firefox似乎支持svg和普通图片,例如jpg,gif等。而其他浏览器则不然。因此,使其适用于所有浏览器的一种方法是,只要图像不是type="image/jpeg",就将类型更改为svg。如果您的所有图片都是svg类型,请使用type="image/svg+xml"。处理此问题的另一种方法是简单地跳过type属性或使用img标记。

我也有:

  • 删除了selectable
  • 的双重初始化
  • 删除.each(),因为您将最后选择的ID设置为嵌入来源

请查看我使用的below code type="image/jpeg,它适用于Chrome / FF / Safri等。

&#13;
&#13;
$(function() {
    $( "#selectable" ).selectable({
        stop: function() {
            $("#chart_image").attr({
                "src": $( ".ui-selected", this )[0].id
            });
        }
    })
    .children().first().addClass('ui-selected');
});
&#13;
  #feedback { font-size: 1.4em; }
  #selectable .ui-selecting { background: #FECA40; }
  #selectable .ui-selected { background: #F39814; color: white; }
  #selectable { list-style-type: none; margin: 0; padding: 0; width: 60%; }
  #selectable li { margin: 3px; padding: 0.4em; font-size: 1.4em; height: 18px; }
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
<link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">

<ol id="selectable">
  <li class="ui-widget-content" id="https://upload.wikimedia.org/wikipedia/commons/thumb/6/65/Blue_morpho_butterfly.jpg/531px-Blue_morpho_butterfly.jpg">Item 1</li>
  <li class="ui-widget-content" id="http://www.potentash.com/wp-content/uploads/2013/03/butterfly.jpg">Item 2</li>
  <li class="ui-widget-content" id="http://smwv.org/wp-content/uploads/2013/11/blue-butterfly2.png">Item 3</li>
</ol>
    
<figure><embed id="chart_image" type="image/jpeg" src="http://smwv.org/wp-content/uploads/2013/11/blue-butterfly2.png" /></figure>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您可以使用selecting选项

  selecting: function(event, ui) { 

    last_selected_value = ui.selecting.value;
    last_selected_id = ui.selecting.id;
            $("#chart_image").attr({
            "src": last_selected_value
        });

   }

查看 JS Fiddle

希望这有帮助

答案 2 :(得分:0)

您需要更改src属性,而不是属性。根据{{​​1}}方法的jQuery documentation,它应该用于设置以下内容:prop()selectedIndextagNamenodeNamenodeTypeownerDocumentdefaultChecked

所以解决方案是:

defaultSelected