【问题标题】:Javascript function to hide button if textarea is empty does not work如果 textarea 为空,则隐藏按钮的 Javascript 函数不起作用
【发布时间】:2017-02-17 01:07:39
【问题描述】:

我在一个 div 中有一个 textarea,下面有一个选择下拉菜单,下面是两个按钮。一种是预览,另一种是用于将文本上传到文件。 如果 textarea 为空,我试图隐藏 Upload 按钮。我的 javascript 无法正常工作,因为它总是隐藏按钮。

这是表单、按钮容器和选择下拉菜单(所有选项都被省略了,因为它们有 20 个):

<div class="container">
<label for="text-area">Paste your code here: </label>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>">
    <textarea name="code_input" id="code_textarea" class="form-control" rows="15" placeholder="Start coding!" required><?= isset($_POST['code_input']) ? $_POST['code_input'] : '' ?></textarea>
    <div class="button-container">
        <select required name="language-select" class="form-control" id="language_selector">
            <option value="" selected disabled>Language</option>
            <option>20 options follow</option>
<!-- THIS WILL KEEP THE VALUE IN THE DROPDOWN AFTER SUBMIT -->
            <script type="text/javascript">
                document.getElementById('language_selector').value = "<?php echo $_POST['language-select'];?>";
            </script>
        </select>
        <br/>
        <br/>
        <div id="button-container" class="btn-toolbar">
            <button id="drive_submit_btn" class="btn btn-md" type="submit">Preview</button>
            <button id="upload_btn" class="btn btn-md" type="submit">Upload</button>
        </div>
    </div>
</form>
<div class="show-code">
    <script src="lib/prism.js"></script>
    <!-- THIS DISPLAYS THE CODE AFTER SUBMITTING USING THE PRISM.JS PLUGIN FOR SYNTAX HIGHLIGHTING -->
    <!-- Get language selection from dropdown and append it to language class. Echo the text as highlighted code -->
    <pre><code class="language-<?php echo $language ?>"><?php echo $user_code; ?></code></pre>
</div>
    </div>


<!-- THIS IS THE JAVASCRIPT TO HIDE THE BUTTON UNTIL TEXT IS ENTERED.-->
<!-- HOWEVER IT ALWAYS HIDES IT!! -->

<script>
$(document).ready(function() {
 /* I EVEN TRIED TO TRIM IT TO NO AVAIL */
    var content = $.trim($('#code_textarea').val());
    if(content.length === 0) {
        $('#upload_btn').hide();
    } else {
        $('#upload_btn').show();
    }
});
</script>

我已经看到了很多链接到他们的 JSFiddle 的答案,而且它们都运行良好。是什么导致我的不能正常工作?除了我的 JS 函数外,其他一切都很好。

【问题讨论】:

  • 能不能只显示相关的源码。还通过php 放入内容,或者您​​的意思是如果客户端从文本区域中删除数据,它不会隐藏按钮,因为为此您需要使用事件侦听器。
  • 您是否通过调试确定 content.length 实际上为 0?当我复制您的代码并删除 textarea 中的 php 脚本时,该按钮工作正常。可能想仔细检查那里发生了什么。
  • @NewToJS 这就是我包含 php 代码的原因。如果我删除php代码,提交后代码块不显示。

标签: javascript php jquery html textarea


【解决方案1】:

原生 javascript 解决方案。

上传按钮从一开始是隐藏的,当为 textarea 触发 keyup 事件时,会检查 textarea 的内容并再次显示或隐藏按钮

code_textarea.addEventListener('keyup', function(){
 if(code_textarea.value){
  upload_btn.classList.remove("hidden");
 }
 else {
  upload_btn.classList.add("hidden");
 }
});
.hidden {
  display:none;
}
<textarea name="code_input" id="code_textarea" class="form-control" rows="5" placeholder="Start coding!" required></textarea>

<button id="upload_btn" class="btn btn-md hidden" type="submit">Upload</button>

【讨论】:

    【解决方案2】:

    将您的处理程序附加到 textarea 的 'keyup' 事件。 (并从不可见的 btn 开始。)

    $(document).keyup('.code_textarea',function() {
     /* I EVEN TRIED TO TRIM IT TO NO AVAIL */
        var content = $.trim($('#code_textarea').val());
        if(content.length === 0) {
            $('#upload_btn').hide();
        } else {
            $('#upload_btn').show();
        }
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div class="container">
    <label for="text-area">Paste your code here: </label>
    <form method="post" >
        <textarea name="code_input" id="code_textarea" class="form-control" rows="5" placeholder="Start coding!" required></textarea>
        <div class="button-container">
            <select required name="language-select" class="form-control" id="language_selector">
                <option value="" selected disabled>Language</option>
                <option>20 options follow</option>
    <!-- THIS WILL KEEP THE VALUE IN THE DROPDOWN AFTER SUBMIT -->
                <script type="text/javascript">
                    document.getElementById('language_selector').value = "";
                </script>
            </select>
            <br/>
            <br/>
            <div id="button-container" class="btn-toolbar">
                <button id="drive_submit_btn" class="btn btn-md" type="submit">Preview</button>
                <button style="display:none" id="upload_btn" class="btn btn-md" type="submit">Upload</button>
            </div>
        </div>
    </form>
    <div class="show-code">
        <script src="lib/prism.js"></script>
        <!-- THIS DISPLAYS THE CODE AFTER SUBMITTING USING THE PRISM.JS PLUGIN FOR SYNTAX HIGHLIGHTING -->
        <!-- Get language selection from dropdown and append it to language class. Echo the text as highlighted code -->
        <pre><code class="language-"></code></pre>
    </div>
        </div>
    
    
    <!-- THIS IS THE JAVASCRIPT TO HIDE THE BUTTON UNTIL TEXT IS ENTERED.-->
    <!-- HOWEVER IT ALWAYS HIDES IT!! -->

    【讨论】:

    • 这几乎可以与 keyup() 函数一起使用,但是,它只有在我开始输入内容时才有效,然后按退格键删除任何文本。
    • 好吧,没关系。我错过了我现在看到的
    • 唯一的问题是,一旦我点击“预览”并发送 $_POST 请求,上传按钮又消失了。但这完全是另一个问题。既然你回答了手头的问题,我会看看能不能弄明白。
    猜你喜欢
    • 2020-11-06
    • 2021-11-21
    • 2016-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多