javascript - 动态添加的类上的 .hasClass() 不起作用

标签 javascript jquery html ajax

我目前正在使用 jQuery 编写一个简单的脚本,该脚本在提交完整的表单之前检查所有文件(通过 AJAX 发送)是否已正确上传。所以交易是:当用户将图像放入浏览器(拖放)时,它会使用 AJAX 发送到服务器,上传完成后,它只需添加一个类“done” "到某个 div 标签。

因此,每当用户放下图像时,它都会添加这种 div:

<div class="preview">/* blablabla other div and span classes */</div>

上传完成后,它看起来就像这样:

<div class="preview done">/* blablabla other div and span classes */</div>

一切都像魅力一样,所以这是表单中有趣的部分:

<form action="target.php" method="post" enctype="multipart/form-data" 
onsubmit="return checkUploadFiles();">

如果一个文件尚未完全上传,它会调用此 JS 函数以防止提交:

function checkUploadFiles(){
    $(".preview").each(function(i, val) {
        if(!val.hasClass('done')){
            alert("Something is not fully uploaded yet, please wait");
            return false;
        };
    });
    return true;
};

但是...表单还是会发送,即使现在有 15 个图像正在上传,并且 15 个 div 标签具有 .preview 类,但没有 .done 类.

我确信我犯了一些愚蠢的错误,或者这只是我不知道 .each().hasClass() 的事情,有人可以吗请帮忙?

提前致谢!

编辑:考虑到我犯的两个错误,这是更正后的脚本:

function checkUploadFiles(){
    var ret = true;
    $(".preview").each(function() {
        var $this = $(this);
        if(!$this.hasClass('done')){
            alert("Something is not fully uploaded yet, please wait");
            ret = false;
        };
    });
    return ret;
};

最佳答案

您从每个循环返回 false,而不是从 validate 方法返回,因此无论验证如何,它始终返回 true。

此外,val 是一个 dom 元素引用,而不是 jQuery 对象,因此它没有 hasClass() 方法。

function checkUploadFiles() {
    if (!$(".preview").not('.done').length) {
        alert("Something is not fully uploaded yet, please wait");
        return false;
    };
    return true;
};

关于javascript - 动态添加的类上的 .hasClass() 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25437246/

相关文章:

javascript - 是否有代码将 javascript 注入(inject)网站以更改 Pane 的宽度?

javascript - require.js 没有加载我的模块

javascript - 提交带有多个复选框/选择菜单的表单信息

javascript - 跳下 anchor (在 table 上)

jQuery:div 直到第二次单击才出现?我想要在第一个。 =\

jquery - '全选'和 'remove all' 与 selected.js

javascript - PHP 回显 JQuery 单击

javascript - jQuery 未加载,这是新的

html - 按宽度(以像素为单位)和百分比 float 两个 DIV

javascript - 如何在文本框中传输传单标记纬度/经度