2017-11-25 2 views
0

Ich möchte Funktionen aufrufen können, indem Sie ihren Namen in ein Eingabefeld schreiben.Ist es möglich, JavaScript-Funktionen über ein HTML-Eingabefeld aufzurufen?

Einige der Funktionen, auf die ich gerne zugreifen möchte, sind calc(), min(), hide() und show(). Diese Funktionen sollten durch ein Eingabefeld und ein Tastenelement ausgelöst werden können.

Etwas in Richtung der Grundfunktionen in der Browser-Konsole.

+1

Wenn Sie den Client zur Eingabe von 'calc()' ermöglichen wollen Führe den Fu aus nction statt nur 'calc' ohne'() 'dann könnte diese [** JsFiddle **] (https://jsfiddle.net/Lug8ns91/), die ich erstellt habe, von Nutzen sein. – NewToJS

Antwort

0

Ja, Sie können es tun. Wenn Sie den Funktionsnamen aus der Texteingabe übergeben können, holen Sie ihn in JavaScript und Sie können diese Funktion dort ausführen. Aber Sie müssen diese Funktion auf globaler Ebene speichern, um von überall darauf zugreifen zu können. Entweder in einem var oder können Sie var _this = this; hinzufügen und rufen Sie die Methoden auf _this

Zum Beispiel:

_this.foo = function() { 
    console.log('bar'); 
} 

Eingabe foo in Texteingabe und bekommen dies in JavaScript, können Sie überprüfen, ob diese Funktion vorhanden ist.

So:

function handleClick(functionName) { 
    var func = _this[functionName]; 
    if (func && typeof func === 'function') { 
     func(); 
    } 
} 

Dies wird prüfen, ob es eine Funktion mit dem Namen ist vergangen existiert und wenn es eine Funktion oder nicht. Und wenn es eine Funktion ist, wird es sie aufrufen.

Hier ist ein working demo vorgeschlagen von NewToJS.

+0

Das OP muss die vorhandenen Funktionen überhaupt nicht ändern. Ein einfaches Stück 'regex' und' replace' kann verwendet werden, um die Eingaben von ** Funktionsaufruf ** anstelle von ** Funktionsname ** zu ermöglichen. Hier ist eine funktionierende Demo [** JsFiddle **] (https://jsfiddle.net/Lug8ns91/) – NewToJS

+0

Ja, das wird gut funktionieren. Danke für den Link. Hinzufügen zur Antwort. –

+0

Sehr willkommen, ich dachte darüber nach, es als Antwort zu posten, aber da andere geantwortet haben, dachte ich, es wäre besser, ein Jsfiddle zu schreiben, aber verschiedene Methoden angeboten zu werden, kann daher nützlich sein. – NewToJS

0

In diesem Ansatz deklariere ich ein Wörterbuch, in dem Schlüssel Funktionsnamen sind, die als Strings dargestellt werden. Und Werte sind deklarierte Funktionen (calc(), min() etc.). Nach Eingabe der Tastenkombination input wird der Wert gelesen und mit dem Wörterbuch verglichen. Wenn das Diktat den Wert input hat, wird die entsprechende Funktion aufgerufen.

Mit jQuery:

function calc() { 
 
    return 'calc'; 
 
} 
 

 
function min() { 
 
    return 'min'; 
 
} 
 

 
const funcDict = { 
 
    'calc': calc(), 
 
    'min': min() 
 
} 
 

 
$('#btn').on('click', function() { 
 
    var inputVal = $('#inpt').val(); 
 
    if (funcDict.hasOwnProperty(inputVal)) { 
 
    console.log(funcDict[inputVal]); 
 
    } 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input name="inpt" id="inpt" /> 
 
<button id="btn">Enter</button>

Ohne jQuery:

function calc() { 
 
    return 'calc'; 
 
} 
 

 
function min() { 
 
    return 'min'; 
 
} 
 

 
const funcDict = { 
 
    'calc': calc(), 
 
    'min': min() 
 
} 
 

 
function onClickHandler(e) { 
 
    var inputVal = document.getElementById('inpt').value; 
 

 
    if (funcDict.hasOwnProperty(inputVal)) { 
 
    console.log(funcDict[inputVal]); 
 
    } 
 
}
<input name="inpt" id="inpt" /> 
 
<button id="btn" onClick="onClickHandler()">Enter</button>

+0

Sie könnten klar sagen, Ihre Antwort verwendet 'jQuery', da das OP es nicht in der Frage markiert hat. – NewToJS

+0

Antwort aktualisiert. –

+1

Sehr gut, jetzt werden Sie erklären, wie es funktioniert, damit die OP und zukünftige Zuschauer den Quellcode verstehen können, anstatt zu erwarten, dass sie ihn einfach kopieren/einfügen. Das Verständnis des Quellcodes ist wichtig, wenn Änderungen zu einem späteren Zeitpunkt benötigt werden. – NewToJS

Verwandte Themen