0

我有一个文本输入,我想让用户从中调用函数。

本质上,我想将字符串绑定到函数,以便当用户键入某个以反斜杠开头的“命令”时,调用相应的函数。

现在,例如,您可以键入/name,后跟一个值,它将 name 设置为用户对象的属性,并具有用户提供的值。

那么我将如何使用 20 个左右的“命令”来做到这一点?

http://jsfiddle.net/k7sHT/5/

jQuery:

$('#textCommand').on('keypress', function(e) {
        if(e.keyCode==13) {
            sendConsole();
        }
});

var user = {};

var sendConsole = function() {
    value = $('#textCommand').val();
    if (value.substring(0,5) === "/name") {
        user.name = value.substring(6,20);
        alert(user.name);
    } else {
        $('body').append("<span>unknown command: "+value+"</span><br />")
        $('#textCommand').val("");
    }
}

HTML:

<input id="textCommand" type="text"><br/>
4

3 回答 3

2

将您的函数存储在一个对象中,以便您可以通过键检索和调用它们:

// Store all functions here
var commands = {
    name : function() {
        console.log("Hello");
    }
}

var sendConsole = function() {
    value = $('#textCommand').val();

    // Strip initial slash
    if(value.substring(0,1) === '/') {
        value = value.substring(1);

        // If the function exists, invoke it
        if(value in commands) {
            commands[value](value);
        }
    }
}

http://jsfiddle.net/NJjNB/

于 2013-08-08T00:17:42.637 回答
1

尝试这样的事情:

var userFunctions = {
    run: function(input)
    {
        var parts = input.split(/\s+/);
        var func = parts[0].substr(1);
        var args = parts.slice(1);

        this[func].call(this, args);
    },

    test: function(args)
    {
        alert(args.join(" "));
    }
};


userFunctions.run("/test hello there"); // Alerts "hello there".
于 2013-08-08T00:18:22.420 回答
0

你可以做:

if(window["functionName"])
{
   window["functionName"](params);
}
于 2013-08-08T00:19:01.467 回答