Skip to content Skip to sidebar Skip to footer

Changing The Function In The Text Box Is Not Changing The Graph

I am attempting to create a fiddle which can allow me to change the graph through and input text showing below the graph. I am using jsxgraph library for that. http://jsxgraph.uni

Solution 1:

This is a jsfiddle-specific problem. If the declaration of the function doIt is changed to

doIt = function (){
  //redefine function f according to the current text field valueeval("function f(x){ return "+document.getElementById("eingabe").value+";}");
  //change the Y attribute of the graph to the new function 
  graph.Y = function(x){ returnf(x); };
  //update the graph
  graph.updateCurve();
  //update the whole board
  board.update();
};

instead of

function doIt() {
     ...
}

then the example runs.

But let me emphasize that meanwhile JSXGraph comes with it's own parser JessieCode (see https://github.com/jsxgraph/JessieCode), which allows the input of common math syntax instead of JavaScript syntax. That means, instead of Math.sin(x) the user may just input sin(x). Additionally, there is the power operator ^, i.e. instead of Math.pow(x,2) it is possible to type x^2.

A minimal example using JessieCode for function plotting looks like this, see https://jsfiddle.net/eLs83cs6/

board = JXG.JSXGraph.initBoard('box', {boundingbox: [-6, 12, 8, -6], axis: true});

doPlot = function() {
    var txtraw = document.getElementById('input').value, // Read user input
        f = board.jc.snippet(txtraw, true, 'x', true), // Parse input with JessieCode
        curve;

    board.removeObject('f'); // Remove element with name f
    curve = board.create('functiongraph', [f, -10, 10], {name:'f'});
};

doPlot();

Ann additional side effect is that the parsing of the math syntax with JessieCode prevents XSS attacks which would be easily possible if the users are allowed to supply arbitrary JavaScript code as input.

Post a Comment for "Changing The Function In The Text Box Is Not Changing The Graph"