javascript - TradingView-widget som ersätter hela HTML-kroppen


Försöker lägga till TradingView-widget på min webbplats. Denna widget måste laddas när användaren väljer ett alternativ från en rullgardinsmeny.

Problem: Widgeten laddas, men den ersätter allt i body och därmed försvinner dropdown-menyn.

Exempel:

HTML-kod:

<select name="fx" class="fx">
    <option value="EURUSD">EURUSD</option>
    <option value="EURJPY">EURJPY</option>
</select>

JS :

function changeFX(fx){
  var fxWidget = new TradingView.widget({
      "width": 500,
      "height": 400,
      "symbol": "FX:"+fx,
      "interval": "1",
      "timezone": "Etc/UTC",
      "theme": "White",
      "style": "2",
      "locale": "en",
      "toolbar_bg": "#f1f3f6",
      "hide_top_toolbar": true,
      "save_image": false,
      "hideideas": true
    }); 
  return themeWidget;
}

$(document).on('change','.fx',function(){
   var widget = changeFX(this.value);
   // do something with widget.

});

http://jsfiddle.net/livewirerules/3e9jaLku/5 (välj alternativ i rullgardinsmenyn, och se widgeten laddas men rullgardinsmenyn försvinner)

Några råd om hur man får rullgardinsmenyn att inte försvinna och samtidigt ladda TradingView-widgeten?

Svar #1

Det är säkerligen för sent, men du kan använda argumentet "container_id" för att välja var du vill placera diagrammet.

källa : https://github.com/mmmy/css3demos/wiki/Widget-Constructor

Svar #2

Så vad jag kan utläsa från widgets-webbplatsen. Vad som än händer är så det fungerar. Så för att detta ska bete sig på det sätt du vill. Du måste använda en iframe i din index.html och skapa en separat fil, säg chart.html, och ge src för iframen som chart.html. Och vid ändring, ändra även src för ramen med en query-parameter och läs den query-parametern i din chart.html och skapa diagrammet. Nedan är koden för din referens.

index.html

<html>
  <head>
    <link rel="stylesheet" href="style.css">
    <script src="https://code.jquery.com/jquery-git1.min.js"></script>
     <script>
      $(document).on('change','.fx',function(){
       //var widget = changeFX(this.value);
        document.getElementById('content').src = "chart.html?value="+this.value;
        document.getElementById('content').style.display = "block";
       });
</script>
<style>
  iframe{
    height:400px;
    width:600px;
    display:none;
  }
</style> 
  </head>
  <body>
   <select name="fx" class="fx">
              <option value="EURUSD">EURUSD</option>
              <option value="EURJPY">EURJPY</option>
</select>
<iframe src="chart.html" id="content" >

</iframe>
  </body>
</html>

diagram.html

<html>
  <head>
<script type="text/javascript" src="https://s3.tradingview.com/tv.js"></script>
    <script>
    function getParameterByName(name, url) {
    if (!url) {
      url = window.location.href;
    }
    name = name.replace(/[\[\]]/g, "\\$&");
    var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
        results = regex.exec(url);
    if (!results) return null;
    if (!results[2]) return '';
    return decodeURIComponent(results[2].replace(/\+/g, " "));
}
var fx = getParameterByName('value');
      var fxWidget = new TradingView.widget({
      "width": 500,
      "height": 400,
      "symbol": "FX:"+fx,
      "interval": "1",
      "timezone": "Etc/UTC",
      "theme": "White",
      "style": "2",
      "locale": "en",
      "toolbar_bg": "#f1f3f6",
      "hide_top_toolbar": true,
      "save_image": false,
      "hideideas": true
    }); 
    </script>
  </head>
  <body>
  </body>
</html>

Här är en plunker Demo som jag har skapat.

Länken som jag använde för koden för att få queryparametrar.

Hur kan jag få värden från frågesträngen i JavaScript?

Hur det hjälper :)