繁体   English   中英

JavaScript新手。 我试图将单选按钮的值作为javascript函数中对象的名称传递

[英]new to javascript. I am trying to pass the value of a radio button as the name of an object in a javascript function

我有一个称为语音的功能。 它接收一个充满句子片段数组的对象,并吐出一个随机短语。 我有两个这样的对象。 每个都有唯一的句子片段。 通过单选按钮,我希望能够选择通过该功能发送的对象,然后按下一个按钮以实现此目的。 当我使用其中一个按钮对功能进行硬连线时,它可以正常工作,但这不是我想要的。 我已经尝试了本网站和其他一些没有运气的建议方法。 我得到的最接近的是何时可以将对象的名称输入到语音函数中,但是它只能识别为字符串。 这是我的HTML ...

    <html>
<head>

</head>
<body>
<!--    <script type="text/javascript" src="wrestlingGame.js"></script> -->
    <div>
        <input type="radio" name="speak" value=ToolBelt.commentary onClick="ToolBelt.handleClick(this)">commentary a<br/>
        <input type="radio" name="speak" value=ToolBelt.commentary1 onClick="ToolBelt.handleClick(this)">commentary b<br/>
    </div> 
    <button onclick="ToolBelt.speak()">Commentary</button>
    <div id="commentator"></div>
    <div id="lif"></div>

</body>

此版本未连接到“注释”按钮。 而是将其连接到单选按钮本身,并且无法正常工作。 我发布此消息是因为这是我最近的尝试。 这是我完整的JavaScript,包括两个对象和语音功能...

    var ToolBelt = {

commentary:{
exclamations: ["Wow! ", "Oh no! ", "God almighty! ", "Good Gracious! "],
leadIn: ["That was a nasty ", "What a powerful ", "A horrifying ", "That was an illegal "], 
strikes: ["uppercut!", "chairshot!", "Lucy lick!", "monkey punch!", "jab", "Bug meow!", "dropkick!"],
},

commentary1:{
exclamations: ["Moo! ", "Quack! ", "Bark! ", "Growl! "],
leadIn: ["Chupa chup ", "Spaghetti ", "Bubbling ", "Necktie "], 
strikes: ["uppercut!", "chairshot!", "Lucy lick!", "monkey punch!", "jab", "Bug meow!", "dropkick!"],
},

handleClick:function(object){
    this.speak(object.value);
},

speak:function(i){


    var string='';

    for(key in i){
        var arr = i[key];
        var x = this.random(0,arr.length);

        string += arr[x] + " ";
    }

    document.getElementById("commentator").innerHTML = string;
},

random: function(max, min){
    return Math.floor(Math.random()*(max-min)+min);
}

};

这里有一些问题。

首先,您不能将JavaScript对象分配为输入元素的值。 输入元素值只能是字符串。 我们可以使用该值来做的是让它包含我们要定位的ToolBelt对象的键:

<input type="radio" name="speak" value="commentary" onClick="ToolBelt.handleClick(this)">commentary a
<br/>
<input type="radio" name="speak" value="commentary1" onClick="ToolBelt.handleClick(this)">commentary b

接下来,你必须了解什么this是在你输入元素的onClick处理程序。 在这种情况下, this是指DOM元素本身。 因此,在ToolBelt.handleClick方法中,我们将要从传递的DOM元素中获取值:

handleClick: function (el) {
    this.speak(this[el.value]);
}

这将起作用,但是只要我们选中其中一个单选按钮,它将生成评论。 但是,“注释”按钮的存在表明我们仅在单击此按钮时才希望生成注释。 为了实现这一目标,我们将不得不删除调用speak我们handleClick方法,而是缓存当前选定的评论关键:

currentCommentaryKey: null,
handleClick: function (el) {
    this.currentCommentaryKey = el.value;
}

然后,我们将更改speak方法以利用缓存的密钥(我添加了一项检查以确保当前注释密钥有效):

speak: function () {
    if (!this.hasOwnProperty(this.currentCommentaryKey)) { return; }
    var i = this[this.currentCommentaryKey];
    /* rest of speak method implementation */
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM