将字符串与函数名关联

时间:2013-08-08 00:10:02

标签: javascript jquery

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

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

现在,例如,您可以键入/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/>

3 个答案:

答案 0 :(得分: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/

答案 1 :(得分: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".

答案 2 :(得分:0)

你可以这样做:

if(window["functionName"])
{
   window["functionName"](params);
}