关于javascript:禁用锚链接,直到执行操作为止

Disable anchor link until action is performed

我有一个标记,带有:

1
2
<i class="fa fa-chevron-left">
<i class="fa fa-chevron-right">

这只是在屏幕两侧的"箭头"。我的页面的布局为"所有合一",这意味着不会重新加载新页面,"主页"-"关于"-"等"页面都位于同一主页面中,您只需使用屏幕右侧和左侧的箭头在它们周围移动。

我在主页上有一个文件输入标签,我想禁用此箭头,直到用户提交文件为止。这是我的输入标签:

1
2
3
4
5
6
7
<form  action="{% url"do_some_work" %}" method="POST"  enctype="multipart/form-data" class="custom-form-thing">
 {% csrf_token %}
     
             <input id="some_file_input" type="file"  name="some_file" class="custom-input-thing" data-buttonName="btn-primary" data-icon="true">
     
     <button type="submit" class="btn btn-default">Submit</button>
 </form>

我对javascript一无所知,但是在用户选择文件之前,我设法禁用了提交按钮。我猜箭头在这种情况下并没有太大区别,但是我说的是我对javascript很烂。

在此先感谢您的帮助。

问题:在用户提交文件之前,我如何禁用此箭头?

编辑

这是我禁用表单中的"提交"按钮的方式,与禁用标签有何不同?:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$('form').submit(function(event){
    validated = true;

    if ($('#some_file_input').get(0).files.length === 0) {
        validated = false;
        console.log("No files selected.");
        // Or some div with image showing
        var div = document.createElement('div');
        div.innerHTML ="<img src='{% static"wappApp/images/Icono_de_Alto.png"%}' classs= 'imgclass'>";

        // better to use CSS though - just set class
        div.setAttribute('class', 'myclass'); // and make sure myclass has some styles in css
        document.body.appendChild(div);
        $('.myclass').finish().fadeIn("fast").delay(2000).fadeOut("slow");

    }

    if (validated != true) {
        event.preventDefault();
    }
});


此解决方案不能真正确定文件是否确实已上传到服务器,但是可以确定是否进行了尝试。

我们需要提前隐藏按钮

1
2
<i class="fa fa-chevron-left">
<i class="fa fa-chevron-right">

一旦用户提交文件,箭头就会出现

1
2
3
4
5
$(document).ready(function(){
    $(".custom-form-thing").submit(function() {
        $('a.hidden').removeClass('hidden');
    });
});

但是完整的解决方案可能不只是jQuery CSS HTML


这是一个简单的示例。您应该缩小选择器的范围以选择特定的锚标记,否则它将应用于所有锚,但是您可以有个主意。

1
2
3
4
5
$('a').on('click', function(e){
    if (conditionNotMet) {
        e.preventDefault();
    }
});