当我在控制台中执行以下代码时, 1,4, undefined 3,2.
我想知道为什么它不执行1,3,4,2
因为在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) 我有这个功能来打印DIV.
每当页面加载并点击我的"打印"链接时,显示DIV没有CSS打印.
如果我关闭Chrome的打印可视化页面并再次单击"打印"链接,则DIV会应用CSS.
有什么想法吗?
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)
<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)
以下方法:
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提交表单.有一种奇怪的行为,数据不会被发布.但如果我提交表格有延迟(即使延迟为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进行了测试,结果相同.
关于发生了什么的任何想法?
我有一个带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) 这可能是一个全新的问题......抱歉,但我无法理解它。
在许多角度文档/示例中,我看到包含在“超时”块中的异步函数。许多都包含在 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) 我有一个表格,其中包含一些要在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) 如果将setTimeout调用的回调添加到作业队列中(例如,如果它在作业队列中是下一个),clearTimeout则在事件循环的当前滴答中调用a ,以提供id原始setTimeout调用的。是否将setTimeout运行作业队列上的回调?
还是运行时神奇地从作业队列中删除了回调?
我需要在按钮的点击事件上附加一个异步行为。我想让浏览器先打开带有链接的新标签页,当我返回上一页时,然后执行异步操作。
起初,我测试了这个: window.setTimeout(() => action(), 0);
它在 Chrome 中运行良好,但在 Firefoxaction()中在链接打开之前执行。很坏。我不敢相信 Firefox 像管理同步块一样管理它?
所以我试过了 window.setTimeout(() => action(), 1);
现在它起作用了!
1 毫秒在这里有什么不同,或者内部事件循环中有解释吗?
你知道答案吗 ?(以及为什么它在 Chrome 和 Firefox 之间的管理方式不同?)
我正在尝试通过更改嵌入在视频的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
javascript ×10
jquery ×3
angularjs ×2
ajax ×1
forms ×1
function ×1
html ×1
settimeout ×1
textarea ×1
tinymce ×1