2016-04-23 108 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

不要混合使用這兩種。