【问题标题】:What is wrong with this if/else Javascript function? [closed]这个 if/else Javascript 函数有什么问题? [关闭]
【发布时间】:2016-01-04 00:02:28
【问题描述】:
$('.chatterbox_comment_form').submit(function(e){
    e.preventDefault();

    var file        = $('#chatterbox_comment_file_upload_1')[0].files[0];
    var reader      = new FileReader();
    var white_space = /^\s+$/;
    var file_val    = $('#chatterbox_comment_file_upload_1').val();
    var exts        = ['jpg', 'jpeg', 'png', 'bmp', 'gif', 'svg'];
    var comment_textarea = $('.form_comment_input');

    if(!file) {

        if(comment_textarea.val() == '' || white_space.test(comment_textarea.val())) {  
            $('.chatterbox_comment_error').html("Can't be blank");
            comment_textarea.css('border', '1px solid #b20000');
        }
        else {
            socket.emit('chatterbox comment', comment_textarea.val(), user.name);
            $('.chatterbox_comment_error').html("");
            comment_textarea.css('border', '1px solid #ccc');
        }
    }
    else if(file)
    {

        var get_ext = file_val.split('.');

        get_ext = get_ext.reverse();

        if(!$.inArray(get_ext[0], exts) > -1) 
        {
            $('.chatterbox_comment_error').html('Only .jpg .png .bmp .gif .svg files are allowed');
        } 
        else 
        {
            // file_val exists and the extension is valid.
            reader.onload  = function(evt) {
                socket.emit('chatterbox comment', $('.form_comment_input').val(), user.name, evt.target.result);
            };

            reader.readAsDataURL(file);
            $('.chatterbox_comment_error').html("");
            comment_textarea.css('border', '1px solid #ccc');
        }

    } 

        $('#chatterbox_comment_file_upload_1').val('');
});

我要做的是在提交此文本区域时,检查是否只有空白输入并检查上传的文件是否有效(png jpg bmp 或 svg),如果不是,则显示错误信息。如果有效,则将其发送到节点服务器。这个功能有点工作。它验证完全空白的输入,但是在尝试发送图像时它不会发送它并且它不会验证不正确的文件上传,例如 .pdf。我相信我的 if/else 语句在某种程度上是错误的。有什么建议?干杯

这是带有处理 socket.emit 调用的函数的 server.js

socket.on('chatterbox comment', function(data, username, image){
    console.log(data, username, image);
    // io.sockets.in(socket.room).emit('chatterbox comment', data, username, image);
});

【问题讨论】:

  • comment_textarea 的值是多少?是未声明的变量吗?
  • 在 if else 中检查你的变量。您是否正在测试具有非布尔值的变量?在这些情况下,您应该使用=====。我也看到了这个!$.inArray(get_ext[0], exts) > -1,它必须是!($.inArray(get_ext[0], exts) > -1)。干杯 kaPinoy。
  • 'comment_textarea = $('.form_comment_input');'抱歉,忘记包含在
  • 请在进行更改时更新您的代码。
  • @itsmikem 请停止宣传该网站;即使它比绝对的火车残骸“更好”,也有许多更好的资源可用。

标签: javascript jquery if-statement socket.io


【解决方案1】:

看起来你有一个 else after 检查 file_val。我认为您想在检查无效扩展后执行此操作。

这个怎么样?

   $('.chatterbox_comment_form').submit(function(e) {
        e.preventDefault();
    var file        = $('#chatterbox_comment_file_upload_1')[0].files[0];
    var reader      = new FileReader();
    var white_space = /^\s+$/;
    var file_val    = $('#chatterbox_comment_file_upload_1').val();
    var exts        = ['jpg', 'jpeg', 'png', 'bmp', 'gif', 'svg'];

    if(!file_val) {
        // No file, 
        if(comment_textarea.val() == '' || white_space.test(comment_textarea.val())) {  
            $('.chatterbox_comment_error').html("Can't be blank");
            comment_textarea.css('border', '1px solid #b20000');
        }
        else {
            socket.emit('chatterbox comment', comment_textarea.val(), user.name);
            $('.chatterbox_comment_error').html("");
            comment_textarea.css('border', '1px solid #ccc');
        }
    }
    else {
        // If we have a file...

        var get_ext = file_val.split('.');

        get_ext = get_ext.reverse();

        // Fixes conditional issue
        if ($.inArray(get_ext[0], exts) == -1) {
            $('.chatterbox_comment_error').html('Only .jpg .png .bmp .gif .svg files are allowed');
        } else {
            // file_val exists and the extension is valid.
            reader.onload  = function(evt) {
                socket.emit('chatterbox comment', comment_textarea.val(), user.name, evt.target.result);
                console.log("reader.onload() - calling socket.emit()");
                console.log(comment_textarea.val(), user.name, evt.target.result);

                $('#chatterbox_comment_file_upload_1').val('');
            };

            reader.readAsDataURL(file);
            $('.chatterbox_comment_error').html("");
            comment_textarea.css('border', '1px solid #ccc');
        }
    }
});

【讨论】:

  • 先生。 Hinson,您的代码似乎正在运行,它验证了图像,但没有将其发送到节点服务器。
  • 您能发布处理 socket.emit('chatterbox comment') 调用的节点 sn-p 吗?另外,是否定义了 user.name?
  • 当然,请看这篇文章的编辑版本。是的,user.name 是获取当前经过身份验证的用户名的对象的一部分。这个脚本正在一个刀片文件上运行,这使我可以很容易地获取名称
  • 另外,我在原帖上写错了,我应该说如果没有文件,验证文本框,如果有文件,文本框不需要验证。如果文本框和文件不为空,请转到节点服务器。除了对文件的验证外,一切似乎都在工作。我相信扩展数组在某种程度上是错误的
  • 嗨,Arvin,我已经更新了我的答案以适合您的条件(我认为)。我不确定为什么服务器没有接收到数据,但添加了一个 console.log 以便您检查 reader.onload 是否被调用过。
猜你喜欢
  • 1970-01-01
  • 2021-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-14
相关资源
最近更新 更多