【问题标题】:Code works outside of setTimeout, but not inside代码在 setTimeout 之外工作,但不在内部
【发布时间】:2018-07-17 13:05:43
【问题描述】:

我正在为我在 Chrome 中的 Web 应用程序上所做的重复性工作做一些轻量级的 JS/jQuery 自动化。我有三个交错不重叠的 setTimeout 函数。前两个工作正常,第三个似乎执行正常,但是代码在 setTimeout 函数内时没有单击文件上传按钮。

function fileUp(){
    console.log("trying to upload");
    var upload = $('form#my-dropzone.dropzone-button.dz-clickable');
    upload.click();
    console.log(upload);
}

var sku = setSKU();
searchSKU(sku);
var crd = setTimeout(function(){
    clickCard(sku,crd);
}, 3000);
var md = setTimeout(function(){
    mediaTab(md);
}, 5000);
var up = setTimeout(function(){
    fileUp();
}, 9000);

但是,当我在 setTimeout 之外调用 fileUp() 时,它运行良好。为什么会这样?

编辑1:

<form action="/imageupload/file" class="dropzone-button dz-clickable" id="my-dropzone">
        <div class="dz-text dz-message">
            <i class="icon-entypo-fix-picture extra-large-entypo-fix-icon box-title-icon"></i><p></p>
            Upload Media
        </div>
        <div id="dropzone-buttons">
            <a href="#" id="start-upload" class="link-button" style="display: none;">Start Upload</a>
            <a href="#" id="close-upload" class="link-button">Close</a><p></p>
            Drop files here or Click to Browse<p></p>
        </div>
        <input>
        <input>
        <input>
    </form>

日志:

[违规] 'setTimeout' 处理程序耗时 133 毫秒 VM49737:23 点击... [违规] 'setTimeout' 处理程序耗时 135 毫秒 entityView.js:渲染实体视图 VM49737:31 试图点击 jquery-2.0.3.min.js:6 [Violation] 'load' 处理程序耗时 890 毫秒 VM49737:38 尝试上传 VM49737:41 init [form#my-dropzone.dropzone-button.dz-clickable, prevObject: init(1), context: document, selector: "form#my-dropzone.dropzone-button.dz-clickable"]

【问题讨论】:

  • 你能发布一些console.logs吗?
  • 应该可以,为什么你认为不行?
  • 什么是upload? HTML?
  • 我猜你之前的功能之一是修改你试图点击的元素,所以upload变成undefined,因为它不匹配任何东西。
  • 我只是尝试在小提琴中复制。使用简单的功能,它应该可以工作。像这儿。 jsfiddle.net/ashishkumar9211/xpvt214o/431583 如果它不起作用 clickCard(sku,crd);或媒体标签(md);正在做某事

标签: javascript jquery


【解决方案1】:
function fileUp(){
    console.log("trying to upload");
    var upload = $('form#my-dropzone.dropzone-button.dz-clickable');
    upload.click();
    console.log(upload);
}

$( document ).ready(function() {
    var sku = setSKU();
    searchSKU(sku);
    var crd = setTimeout(function(){clickCard(sku,crd)}, 3000);
    var md = setTimeout(function(){mediaTab(md)}, 5000);
    var up = setTimeout(function(){fileUp()}, 9000);
});

可能没有加载表单。用户 .ready() 函数应该可以工作

【讨论】:

    【解决方案2】:

    我要做的是尝试修改“上传”的背景颜色以确保正确选择元素。

     $('form#my-dropzone.dropzone-button.dz-clickable').css('background-color', "green");
    

    如果它什么都不做,这意味着你的选择器不返回任何东西。为了准确告诉您这里出了什么问题,我们需要您在此处尝试选择的元素的 html 以及您的控制台日志。

    我还想从第三个 setTimeout 中删除匿名函数,直接将 fileUp 设置为回调函数:var up = setTimeout(fileUp, 9000);

    【讨论】:

    • css 更改有效,删除匿名函数时没有更改。在上面添加了要编辑的 html 和日志。
    • 从您添加的代码和css修改的结果来看,我会说我们要查找的错误不在您发送给我们的代码中的任何位置。我的猜测是 click() 事件在您的表单元素上被正确触发,这可能意味着两件事:1 - 您的表单没有点击处理程序(或未在处理程序中正确选择)2 - 内部发生了问题表单点击处理程序的回调。无论哪种方式,我们还需要元素的点击处理程序的 js/jquery 代码。
    猜你喜欢
    • 1970-01-01
    • 2018-12-21
    • 2020-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-15
    • 1970-01-01
    相关资源
    最近更新 更多