相关疑难解决方法(0)

setTimeout(function(){console.log(3)},0); 它的值为0

当我在控制台中执行以下代码时, 1,4, undefined 3,2.

我想知道为什么它不执行1,3,42 因为在setTimeout(function(){console.log(3)}, 0);毫秒内参数是0

    (function() {
        console.log(1); 
        setTimeout(function(){console.log(2)}, 1000); 
        setTimeout(function(){console.log(3)}, 0); 
        console.log(4);
    })();
Run Code Online (Sandbox Code Playgroud)

javascript function

6
推荐指数
2
解决办法
9584
查看次数

打印功能仅在第二次单击后有效

我有这个功能来打印DIV.
每当页面加载并点击我的"打印"链接时,显示DIV没有CSS打印.
如果我关闭Chrome的打印可视化页面并再次单击"打印"链接,则DIV会应用CSS.

有什么想法吗?

使用Javascript

function printDiv(divId) {

  var printDivCSSpre =
'<link href="/static/assets/vendor/sb-admin-2-1.0.7/bower_components/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet">' +
'<link href="/static/assets/vendor/sb-admin-2-1.0.7/dist/css/sb-admin-2.css" rel="stylesheet">' +
'<div style="width:1000px; padding-right:20px;">';

  var printDivCSSpost = '</div>';

  $('body').append('<iframe id="print_frame" name="print_frame" width="0" height="0" frameborder="0" src="about:blank"></iframe>');

    $("link").clone().appendTo($("#print_frame").contents().find("head"));
window.frames["print_frame"].document.body.innerHTML =
    printDivCSSpre + document.getElementById(divId).innerHTML + printDivCSSpost;
  window.frames["print_frame"].window.focus();
  var windowInstance = window.frames["print_frame"].window;
  windowInstance.print();
}
Run Code Online (Sandbox Code Playgroud)

HTML

<a id="print" href="#">
    <i class="fa fa-print"></i> Print
</a>
<script>
    $('#print').click(function () {
        printDiv('report')
    })
</script>

<div id="report" class="report">
    <p># Generated Table#</p>
</div>
Run Code Online (Sandbox Code Playgroud)

首先点击:

http://imgur.com/a/Go81Y

关闭打印预览页面并再次单击打印

http://imgur.com/a/SCxJF

javascript

6
推荐指数
1
解决办法
1373
查看次数

setTimeout(f,0)等价?为什么它解决了跨浏览器问题?

以下方法:

Init: function (selector, settings)
{
    setTimeout(function()
    {
        var s =
        {
            width: '100%',
            script_url: '/Content/Scripts/tiny_mce/tiny_mce.js',
            theme: "advanced",
            plugins: "autolink,lists,pagebreak,style,layer,table,paste,directionality,noneditable,visualchars,xhtmlxtras,template",
            theme_advanced_buttons1: "fontselect,fontsizeselect,|,bold,italic,underline,forecolor,backcolor,|,justifyleft,justifycenter,justifyright,justifyfull,|,bullist,numlist",
            theme_advanced_buttons2: "",
            theme_advanced_buttons3: "",
            theme_advanced_buttons4: "",
            theme_advanced_more_colors: false,
            theme_advanced_toolbar_location: "top",
            theme_advanced_toolbar_align: "left",
            theme_advanced_statusbar_location: "none",
            theme_advanced_resizing: false,
            convert_urls: !!$(selector).data("richEditor-ConvertUrls") // by default we don't convert urls
        };
        $.extend(s, settings);
        $(selector).tinymce(s);
    },0);
}
Run Code Online (Sandbox Code Playgroud)

适用于所有浏览器,出于某种原因,我需要setTimeout(f,0)调用firefox,这个方法是在MVC上的ajax部分加载上调用的,没有这个调用,编辑器挂起在firefox上并且页面中断(点击最常见的异常结果)而不是).随着电话,一切都很完美.

我想知道如何避免这个setTimeout调用(通过一些其他的解决方法),如果这不是一个选项,我想知道为什么.

我很害怕这可能不是这种情况下最干净的解决方案.

javascript ajax model-view-controller jquery tinymce

5
推荐指数
1
解决办法
394
查看次数

使用JS提交表单时未设置发布变量

一旦用户点击标签,我就会使用javascript提交表单.有一种奇怪的行为,数据不会被发布.但如果我提交表格有延迟(即使延迟为0),它也可以.

这是html:

<form action="/other-page" method="post">
    <input id="val-1" type="checkbox" name="filter[]" value="1">
    <label for="val-1">Value 1</label>

    <input id="val-2" type="checkbox" name="filter[]" value="2">
    <label for="val-2">Value 2</label>
</form>
Run Code Online (Sandbox Code Playgroud)

剧本:

<script>
    $('label').click(function() {
        var form = $(this).closest('form')

        // if I use the following line the values won't be set
        form.submit()

        // If I use a `setTimeout` it works, even with a delay of 0
        setTimeout(function() {
             form.submit()
        }, 0)
    })
</script>
Run Code Online (Sandbox Code Playgroud)

这不是一个大问题,因为我可以使用它,setTimeout但写入延迟0是非常难看的.我考虑过浏览器错误,但我使用Chrome和Firefox进行了测试,结果相同.

关于发生了什么的任何想法?

javascript forms jquery

5
推荐指数
1
解决办法
633
查看次数

jQuery:在按Enter键时在光标位置添加换行符

我有一个带textarea(id = details)的表单.

有没有办法<br />在这个textarea中点击Enter时在光标位置插入换行符()的HTML代码?

我只需要这个就可以在IE中工作了.

<textarea class="input height120 elastic span12" name="details" id="details" onkeyup="countCharLimit(event)" onpaste="countCharLimit(event)"></textarea>
Run Code Online (Sandbox Code Playgroud)

html javascript jquery textarea cursor-position

5
推荐指数
1
解决办法
2973
查看次数

为什么需要在角度中使用“超时”

这可能是一个全新的问题......抱歉,但我无法理解它。

在许多角度文档/示例中,我看到包含在“超时”块中的异步函数。许多都包含在 setTimeout() 中并且需要显式使用

if (!$scope.$$phase) {
    $scope.$apply();
}
Run Code Online (Sandbox Code Playgroud)

鉴于 angular 提供了 $timeout,上面的代码似乎已经过时或错误,在 angular 内,应该始终首选使用 $timeout。不过,我离题了。

以下是一些示例代码的片段:http : //markdalgleish.com/2013/06/using-promises-in-angularjs-views/

var myModule = angular.module('myModule', []);
// From this point on, we'll attach everything to 'myModule'

myModule.factory('HelloWorld', function($timeout) {
  var getMessages = function(callback) {
    $timeout(function() {
      callback(['Hello', 'world!']);
    }, 2000);
  };

  return {
    getMessages: getMessages
  };
});
Run Code Online (Sandbox Code Playgroud)

我在任何与异步调用相关的超时块中都看到了这种代码包装。但是有人可以解释为什么需要这样做吗?为什么不把上面的代码改成:

var myModule = angular.module('myModule', []);
// From this point on, we'll attach everything to 'myModule'

myModule.factory('HelloWorld', function() {
  var getMessages = function(callback) { …
Run Code Online (Sandbox Code Playgroud)

javascript angularjs

5
推荐指数
1
解决办法
969
查看次数

$ window.print(),不会在角度js中打印更新的模型数据

我有一个表格,其中包含一些要在html中查看的数据.当我点击打印时,我需要从db获取所有数据并打印它.当我点击打印时,我正在获取数据并填充模型数据,只更新模型并打印显示旧数据.在下面的代码中,当我点击打印时,新项目不会添加到项目中.

http://jsfiddle.net/vijaivp/Y3BJa/306/

HTML

<div ng-app>
    <div class="hidden-print" ng-controller="PrintCtrl">
        <br />
        <div id="overallPrint" class='visible-print' style="float:left;     margin-right:50px;">
            <h4>Overall Report</h4>

            <table border="1">
                <thead>
                    <tr>
                        <td>Name</td>
                        <td>Price</td>
                        <td>Quantity</td> 
                    </tr>
                </thead>
                <tbody>
                    <tr ng-repeat="item in items">
                        <td>{{item.Name}}</td>
                        <td>{{item.Price}}</td>
                        <td>{{item.Quantity}}</td>                       
                    </tr>
                </tbody>
            </table>

            <br>
            <input type="button" value="Print Overall" ng-click='printOverallReport()' />
        </div>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

JS

function PrintCtrl($scope, $window, $q)  {
    $scope.items = [

        {Name: "Soap", Price: "25", Quantity: "10"},
        {Name: "Shaving cream", Price: "50", Quantity: "15"}
    ];

    $scope.newitems = [
        {Name: "Shampoo", Price: "100", Quantity: "5"}
    ]; …
Run Code Online (Sandbox Code Playgroud)

javascript angularjs

5
推荐指数
1
解决办法
9320
查看次数

是否将运行或清除作业队列上的setTimeout回调?

如果将setTimeout调用的回调添加到作业队列中(例如,如果它在作业队列中是下一个),clearTimeout则在事件循环的当前滴答中调用a ,以提供id原始setTimeout调用的。是否将setTimeout运行作业队列上的回调?

还是运行时神奇地从作业队列中删除了回调?

javascript settimeout

5
推荐指数
1
解决办法
211
查看次数

为什么 Firefox 处理 setTimeout(fn, 0) 同步而 setTimeout(fn, 1) 异步?

我需要在按钮的点击事件上附加一个异步行为。我想让浏览器先打开带有链接的新标签页,当我返回上一页时,然后执行异步操作。

起初,我测试了这个: window.setTimeout(() => action(), 0);

它在 Chrome 中运行良好,但在 Firefoxaction()中在链接打开之前执行。很坏。我不敢相信 Firefox 像管理同步块一样管理它?

所以我试过了 window.setTimeout(() => action(), 1);

现在它起作用了!

1 毫秒在这里有什么不同,或者内部事件循环中有解释吗?

你知道答案吗 ?(以及为什么它在 Chrome 和 Firefox 之间的管理方式不同?)

javascript

5
推荐指数
0
解决办法
451
查看次数

Chrome扩展程序:在页面上运行任何嵌入式脚本之前,先运行内容脚本

我正在尝试通过更改嵌入在视频的html观看页面中的player_api脚本内部的一些变量来更改YouTube播放器的某些行为。

我正在尝试修改的嵌入式脚本

问题是,无论我如何尝试,播放器的嵌入式脚本始终会在我的扩展程序对其进行修改之前运行。因此,保持玩家的行为相同。

我尝试将清单中的run_at属性设置为document-start,但是脚本根本没有运行

在更改脚本之前,我该怎么做才能停止执行该脚本?

PS:我尝试通过截获html调用并使用Charles Proxy编辑正文来更改脚本,然后按我的意愿更改了播放器的行为。因此,它知道,如果在正确的时间完成,它应该可以工作。

manifest.json

{
    "manifest_version": 2,
    "name": "YouFit For YouTube",
    "version": "1",
    "content_scripts": [{
        "js": ["content.js"],
        "matches": ["https://*.youtube.com/watch?*",
        "https://*.youtube.com/watch?*"],
    }],
    "browser_action": {
        "default_icon": "icon.png"
    }
}
Run Code Online (Sandbox Code Playgroud)

content.js

function changeBehavior() {
    var scriptElements = document.getElementsByTagName('script');
    for (var i = 14; i < scriptElements.length; i++) {
        var curScriptBody = scriptElements[i].outerHTML;
        // Find the script i'm interested in
        if (curScriptBody.indexOf("var ytplayer") != -1) {
            scriptElements[i].outerHTML = scriptElements[i].outerHTML.replace("<text>", "<replacement …
Run Code Online (Sandbox Code Playgroud)

javascript google-chrome browser-extension google-chrome-extension content-script

5
推荐指数
1
解决办法
984
查看次数