2016-04-23 56 views
0

我写了这么一小段代码,但我不确定它为什么不起作用?应该输入个人姓名,并根据他们选择的内容输出一个网站,并在其末尾输入他们的姓名。JavaScript生成文本到文本框?

的jsfiddle http://jsfiddle.net/tQyvp/135/

的JavaScript

function generateDynamicSignature() { 
    var dynSig = ""; 
    var user = document.getElementById("usernameInput"); 
    var e = document.getElementById("scriptListInput"); 
    var strUser = e.options[e.selectedIndex].text; 
    if (strUser == "example") { 
     dynSig = "http://example.com/users/"; 
    } 
    document.getElementById("generateSignature").addEventListener('click', function() { 
     var text = document.getElementById('dynamicSignatureOutput'); 
     text.text = (dynSig + user); 
    }); 
} 

HTML

<select class="form-control" id="scriptListInput"> 
        <option value="example">Example 1</option> 
       </select> 

回答

1

你的代码有几个问题,我会尽力列出它们。

首先,您从未将用户名输入添加到HTML中。

接下来,您似乎混淆了访问/设置HTML输入文本的方式。您通过value字段执行此操作。对于用户名输入,你忘了访问任何财产,所以你需要将它更改为:

var user = document.getElementById("usernameInput").value; 

您以后使用的两种选择元素和输出的text财产。这些也应该是value

另一个问题是,您已将侦听器放入侦听器中。您的外部函数generateDynamicSignature侦听按钮的onclick事件。该功能仅在单击该按钮后运行。但是在这个函数中,你附加了一个新的监听器。这个内部监听器只会在有人点击按钮两次时运行。

我已经包含在新的小提琴这些变化:

https://jsfiddle.net/zdfnk77u/

0
  • 哪里是usernameInput在HT毫升?
  • 中如果使用===代替==
0

如果当你在你的HTML添加缺少的“usernameInput”元素,所有你需要做的就是...

dynSig='http://example.com/users/'+usernameInput.value; 
0

我认为问题的一部分是,您想要访问value而不是input elementstext。因此,对于textstrUser,您希望执行text.value而不是text.text等。

此外,基于JSfiddle,您可能想要重写如何使用文档侦听器和html元素的onclick。每次单击该按钮时,都会通过generateDynamicSignature并创建一个侦听器来更改该值,但不一定会更改该值本身。如果你在click监听器中移动generate函数的逻辑,那应该可以解决你的大部分问题。

0

您在$(文件)。就绪创建您generateDynamicSignature。 有两种方法。

  • 定义function generateDynamicSignature$(document).ready

  • 您button.click绑定到一个处理器中$(document).ready

不要混合使用这两种。