Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在特定条件下启用HTML按钮_Javascript_Jquery_Html - Fatal编程技术网

Javascript 在特定条件下启用HTML按钮

Javascript 在特定条件下启用HTML按钮,javascript,jquery,html,Javascript,Jquery,Html,我有两个HTML按钮,如下所示: <button id="alarm-log-submit" class="btn btn-primary alarm-log-btn" >Generate Log</button> <button id="alarm-log-download" class="btn btn-primary alarm-log-second-btn">Download Log</button> Python端 @socketio.

我有两个HTML按钮,如下所示:

<button id="alarm-log-submit" class="btn btn-primary alarm-log-btn" >Generate Log</button>
<button id="alarm-log-download" class="btn btn-primary alarm-log-second-btn">Download Log</button>
Python端

@socketio.on("start_end_time", namespace='/frontend')
def db_access(json_object):
    start_ts = str(json_object['startTime'])
    end_ts = str(json_object['endTime'])
    file_type = str(json_object['filetype'])
    table_name = str(json_object['tableName'])
    cur = db_connect()
    json_data = db_select_time_query(cur, start_ts, end_ts, table_name)
    # File generation
    if file_type == "csv":
        db_export_to_csv(json_data, table_name)
        print "csv"
    else:
        print "pdf"
        db_export_to_pdf(json_data, table_name)
编辑我解决了下面的问题。感谢您的建议和帮助

仅针对javascript:

您可以设置事件触发器,以在单击第一个按钮后显示第二个按钮。比如说,

    <button id="alarm-log-submit" class="btn btn-primary alarm-log-btn" onclick="document.getElementById('alarm-log-download').disabled = false;">Generate Log</button>
$.when($('#alarm-log-submit')).done(
    document.getElementById("alarm-log-download").disabled = false;
);
参考:


我不知道您是如何将文件保存在本地磁盘上的,但您必须找到一种方法,以便在成功保存此文件时收到返回。然后启用下载按钮

假设您正在使用这样的东西:

<SCRIPT LANGUAGE="JavaScript">
 function WriteToFile(passForm) {

    set fso = CreateObject("Scripting.FileSystemObject");  
    set s = fso.CreateTextFile("C:\test.txt", True);
    s.writeline("HI");
    s.writeline("Bye");
    s.writeline("-----------------------------");
    s.Close();
    document.getElementById("alarm-log-download").disabled = false;
 }
  </SCRIPT>

函数WriteToFile(passForm){
设置fso=CreateObject(“Scripting.FileSystemObject”);
设置s=fso.CreateTextFile(“C:\test.txt”,True);
s、 writeline(“HI”);
s、 书面语(“再见”);
s、 writeline(“-------------------------------”;
s、 Close();
document.getElementById(“报警日志下载”).disabled=false;
}

我不太确定如何生成日志文件。
如果在服务器端生成日志文件。要在生成文件后启用“下载”按钮,您可以通过设置计时器来检查服务器上是否存在该文件,或者如果服务器上没有该文件的实际物理路径,您可以使用一个变量来指示是否生成了该文件,并定期发送检查请求(AJAX)。

谢谢大家的帮助。以下是答案:

Javascript

$( document ).on("click", "#alarm-log-submit", function(e){
        e.preventDefault();
        document.getElementById("alarm-log-download").setAttribute("disabled", "disabled");
        var tableName = $('#alarm-log-stream').val();
        var startTime = $('#alarm-log-start-datepicker').find('input').val();
        var endTime = $('#alarm-log-end-datepicker').find('input').val();
        var fileType = $("#file-type").val().toLowerCase();
        var returnVal = {'tableName':tableName,'startTime':startTime, 'endTime':endTime, 'filetype':fileType};
        console.log(returnVal);
        socket.emit("start_end_time", returnVal);
        //when you click this button, it sends a JSON object with player id, startTime="YYYY:MM:DD:HH:MM:SS", endTime=that
        socket.on('start_end_time', function (data) {
            document.getElementById("alarm-log-download").removeAttribute("disabled");
            console.log("socket call");
            console.log(data);
        });

    });
$( document ).on("click", "#alarm-log-download", function(e){
        e.preventDefault();
        var tableName = $('#alarm-log-stream').val();
        var fileType = $("#file-type").val().toLowerCase();
        var fileName = tableName + "." + fileType;
        window.location = "/api/rest/v1/scanning/download/" + fileName;
        console.log(fileName)
        $("#download-form").action("/api/rest/v1/scanning/download/" + fileName);
        $("#download-form").submit();

    });
蟒蛇

@socketio.on("start_end_time", namespace='/frontend')
def db_access(json_object):
    start_ts = str(json_object['startTime'])
    end_ts = str(json_object['endTime'])
    file_type = str(json_object['filetype'])
    table_name = str(json_object['tableName'])
    cur = db_connect()
    json_data = db_select_time_query(cur, start_ts, end_ts, table_name)
    if file_type == "csv":
        db_export_to_csv(json_data, table_name)
        print "csv"
    else:
        print "pdf"
        db_export_to_pdf(json_data, table_name)
    emit_data = json.dumps("file created")
    socketio.emit('start_end_time', emit_data, namespace="/frontend")

“主要的挑战是,根据处理数据的大小,文件生成可能需要不同的时间。”您没有包括任何与“文件生成”过程相关的
javascript
。请参阅“//如何检查此处的文件创建?!”如何创建文件
.action()
不是jQuery方法。它是在后端python scriptIs
socket
a
WebSocket
实例中生成的?如果是,请使用
socket
事件处理程序。是的,我目前正在这样做。谢谢你的建议。请看一下我的编辑
@socketio.on("start_end_time", namespace='/frontend')
def db_access(json_object):
    start_ts = str(json_object['startTime'])
    end_ts = str(json_object['endTime'])
    file_type = str(json_object['filetype'])
    table_name = str(json_object['tableName'])
    cur = db_connect()
    json_data = db_select_time_query(cur, start_ts, end_ts, table_name)
    if file_type == "csv":
        db_export_to_csv(json_data, table_name)
        print "csv"
    else:
        print "pdf"
        db_export_to_pdf(json_data, table_name)
    emit_data = json.dumps("file created")
    socketio.emit('start_end_time', emit_data, namespace="/frontend")