C#.net - 如何使用JavaScript在按钮单击时显示动态生成的textarea?

时间:2015-01-14 22:01:49

标签: javascript c# jquery html knockout.js

我想基于按钮点击显示文本区域。非常简单,但textarea和按钮是使用Knockout js动态生成的。我当前的代码有效,除了它只扩展了第一个文本区域。显示了几个项目。

HTML(按钮和textarea是最后两个控件):

 <!-- ko foreach: projects -->
    <div id="eachOppyProject" style="border-bottom: 1px solid #eee;">
        <table>
            <tbody>
                <tr>
                    <td><a data-bind="attr: { href: '/tools/oppy/' + guid }" style="font-size: 25px;"><span class="link" data-bind="    value: guid, text: name"></span></a></td>
                </tr>
                <tr data-bind="text: projectDescription"></tr>
                <tr data-bind="text: guid"></tr>
            </tbody>
        </table>
        <span class="forminputtitle">Have you done project this before?</span>  
        <input type="button" id="oppyBtn" class="btnOppy" onclick="displayTextArea()" value="Yes" />
        <textarea id="oppyDoneTextArea" placeholder="Tell us a little of what you've done." style=" display:none; height:75px; " /><br />
    </div>
<!-- /ko -->

JavaScript的:

function displayTextArea() {
    var my_disply = document.getElementById('oppyDoneTextArea').style.display;
    if (my_disply == "block")
        document.getElementById('oppyDoneTextArea').style.display = "none";
    else
        document.getElementById('oppyDoneTextArea').style.display = "block";
}

如您所见,控件是基于Knockout绑定的对象动态生成的。因此,使用ID是一个坏主意,因为它会生成重复的ID。这是我现在的问题 - 这段代码适用于第一个文本区域,但不适用于显示的其他项目。

1 个答案:

答案 0 :(得分:0)

这是因为您的按钮是type=submit并导致回发,更改:

<input type="submit" id="oppyBtn" class="btnOppy" onclick="displayTextArea()" value="Yes" />

<input type="button" id="oppyBtn" class="btnOppy" onclick="displayTextArea()" value="Yes" />