小编Mir*_*ror的帖子

DOM刷新长时间运行的功能

我有一个按钮,当它被点击时会运行一个长时间运行的功能.现在,当函数运行时,我想更改按钮文本,但我在Firefox,IE等浏览器中遇到问题.

HTML:

<button id="mybutt" class="buttonEnabled" onclick="longrunningfunction();"><span id="myspan">do some work</span></button>
Run Code Online (Sandbox Code Playgroud)

JavaScript的:

function longrunningfunction() {
    document.getElementById("myspan").innerHTML = "doing some work";
    document.getElementById("mybutt").disabled = true;
    document.getElementById("mybutt").className = "buttonDisabled";

    //long running task here

    document.getElementById("myspan").innerHTML = "done";
}
Run Code Online (Sandbox Code Playgroud)

现在这在firefox和IE中都有问题,(在chrome中它可以正常工作)

所以我想把它放到一个settimeout:

function longrunningfunction() {
    document.getElementById("myspan").innerHTML = "doing some work";
    document.getElementById("mybutt").disabled = true;
    document.getElementById("mybutt").className = "buttonDisabled";

    setTimeout(function() {
        //long running task here
        document.getElementById("myspan").innerHTML = "done";
    }, 0);
}
Run Code Online (Sandbox Code Playgroud)

但这对firefox也不起作用!按钮被禁用,更改颜色(由于新css的应用)但文本不会更改.

我必须将时间设置为50毫秒而不是仅仅0毫秒,以使其工作(更改按钮文本).现在我至少发现这个愚蠢.我可以理解它是否只能在0ms的延迟下工作,但在较慢的计算机中会发生什么?也许firefox在settimeout需要100ms?听起来很愚蠢.我尝试了很多次,1毫秒,10毫秒,20毫秒......不,它不会刷新它.只有50ms.

所以我遵循了这个主题的建议:

在javascript dom操作之后强制在Internet Explorer中进行DOM刷新

所以我试过了:

function longrunningfunction() {
    document.getElementById("myspan").innerHTML = "doing some work";
    var a = document.getElementById("mybutt").offsetTop; //force …
Run Code Online (Sandbox Code Playgroud)

javascript firefox internet-explorer dom

24
推荐指数
3
解决办法
2万
查看次数

从PHP中删除UTF-8字符串中的控制字符

所以我在客户端(输入后)删除控制字符(tab,cr,lf,\ v和所有其他隐形字符),但由于客户端不可信,我必须在服务器中删除它们.

所以根据这个链接http://www.utf8-chartable.de/

控制字符从x00到1F,从7F到9F.因此我的客户端(javascript)控件删除功能是:

return s.replace(/[\x00-\x1F\x7F-\x9F]/g, "");
Run Code Online (Sandbox Code Playgroud)

和我的php(服务器)控件删除功能是:

$s = preg_replace('/[\x00-\x1F\x7F-\x9F]/', '', $s);
Run Code Online (Sandbox Code Playgroud)

现在,这似乎会产生国际utf8字符的问题,例如PHP中的ς(xCF x82)(因为x82在第二个序列组中),javascript等效不会产生任何问题.

现在我的问题是,我应该将控制字符从7F删除到9F吗?据我所知,从127到159(7F到9F)的序列显然可以是有效的UTF-8字符串的一部分?

另外,也许我甚至不应该过滤00到31个控制字符,因为这些字符中的一些可能会出现在一些奇怪的(日语?中文?)但是有效的utf-8字符?

javascript php encoding utf-8

19
推荐指数
1
解决办法
9820
查看次数

Javascript从html表的特定行获取列的文本值

用户点击表格的一行,我想(在Javascript中)得到该行的第3列的内部HTML.

就像是 :

document.getElementById("tblBlah").rows[i].columns[j].innerHTML
Run Code Online (Sandbox Code Playgroud)

似乎无法实现,我在这里或网上找不到任何东西.

任何解决方案将非常感谢(没有jQuery)

html javascript row html-table

16
推荐指数
2
解决办法
10万
查看次数

javascript私有函数访问公共变量

我有这堂课:

function ctest() {
    this.var1 = "haha";
    this.func1 = function() {
        alert(this.var1);
        func2();
        alert(this.var1);
    }
    var func2 = function() {
        this.var1 = "huhu";
    }
}
Run Code Online (Sandbox Code Playgroud)

并称之为:

    var myobj = new ctest();
    myobj.func1();
Run Code Online (Sandbox Code Playgroud)

是不是第二个警报会弹出"huhu"?func2是私有的,是否可以访问var1公共变量?

如果私有函数无法访问公共变量,我该怎么办?

提前致谢!

javascript private class public

13
推荐指数
2
解决办法
7797
查看次数

javascript返回递归函数

讨厌为前一个扩展打开一个新问题:

function ctest() {
    this.iteration = 0;
    this.func1 = function() {
        var result = func2.call(this, "haha");
        alert(this.iteration + ":" + result);
    }
    var func2 = function(sWord) {
        this.iteration++;
        sWord = sWord + "lol";
        if ( this.iteration < 5 ) {
            func2.call(this, sWord);
        } else {
            return sWord;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这会返回iteration = 5,但结果是UNDEFINED?怎么可能?我明确地返回了sWord.它应该返回"hahalollollollollol"并且仅用于双重检查,如果我在返回sWord之前警告(sWord)它正确地显示它.

javascript recursion return

12
推荐指数
2
解决办法
1万
查看次数

快速与容器内的大量元素进行交互(DOM,javascript)

所以我在容器div中有大量的div(4000-5000)[每个包含跨度,锚点,图像等],基本上我将它们的显示设置为none或基于条件阻止.这确实需要一些时间.

在我搜索更快的内容时,我遇到了这个页面https://developers.google.com/speed/articles/javascript-dom,解决方法是从DOM中删除容器div并通过getElementsByTagName迭代包含的元素.

/**
 * Remove an element and provide a function that inserts it into its original position
 * @param element {Element} The element to be temporarily removed
 * @return {Function} A function that inserts the element into its original position
 **/
function removeToInsertLater(element) {
  var parentNode = element.parentNode;
  var nextSibling = element.nextSibling;
  parentNode.removeChild(element);
  return function() {
    if (nextSibling) {
      parentNode.insertBefore(element, nextSibling);
    } else {
      parentNode.appendChild(element);
    }
  };
}


function updateAllAnchors(element, anchorClass) {
  var insertFunction = removeToInsertLater(element);
  var …
Run Code Online (Sandbox Code Playgroud)

html javascript dom

9
推荐指数
3
解决办法
3460
查看次数

sqlite&windows:没有足够的存储空间来完成此操作,并且尚未调用CoInitialize

几天前,我实现了一个自动填充建议系统,该系统根据语言使用字典.以下是它的工作原理:JQuery UI自动完成 - >调用.php文件 - >调用VB6 COM dll函数 - >调用.sqlite文件并根据键入的字母查找结果 - >将结果返回给php - >将结果返回给JS .

它的工作速度相当快,因为​​它完成每个操作平均需要约7(毫秒).在高峰时段,谷歌分析显示约1200名在线用户,通常我们每天都会half a million调用〜这个特定的功能.

从这个自动完成建议系统上线的那天起,我开始注意到数百个非常具体的错误消息:

Not enough storage is available to complete this operation.

CoInitialize has not been called.
Run Code Online (Sandbox Code Playgroud)

一些可能有用的信息:

a)这些消息主要出现在峰值游客horus期间

b)它们并不总是只出现在特定的功能上,而是出现在其他功能上(但在我们实现上述系统之前从未这样做过)

c)之前我使用过sqlite数据库来获取其他东西(不像实时那么多,就像在用户输入时返回结果一样)但是从来没有出现这样的问题

d)sqlite文件的大小约为350MB,有3个表,其中一个有~220万个条目,另一个有1,600万个,另外有~16,000个条目和所有必要的列被索引.

e)显然,该数据库用于只读操作

f)系统禁用后,所有消息都会停止.

g)我每天都会收到大约一千条这样的错误消息(每天有大约500.000次调用函数)

服务器系统是两个(x2)盒子:核心I7 4770在3,8GHZ,32GB RAM,Windows服务器2012和IIS.

消息随机出现,仅在高峰时段出现.我无法在开发机器上复制问题.到目前为止,搜索互联网一直没有结果.关于导致它的原因以及如何解决的任何想法都将受到欢迎.

谢谢.

php windows sqlite vb6 iis

9
推荐指数
1
解决办法
475
查看次数

谷歌铬虫与预包装

我想要实现的是保留textarea中的序列空格,并且在行的末尾不要破坏单词.

所以根据这个:http: //www.w3schools.com/cssref/pr_text_white-space.asp

当我们设定

white-space: pre-wrap;
Run Code Online (Sandbox Code Playgroud)

WHITESPACES应该保留下来,并且最后不要分开.

然而,正如这个jsfiddle演示的那样,google chrome不会保留空白序列(textarea中有很多空格但是chrome显示的更少.请注意每个其他浏览器如何显示它们,但chrome no).

http://jsfiddle.net/LXUEe/2/

有没有解决这个问题的方法?

我可以使用以下方法保留空格:

white-space: pre;
Run Code Online (Sandbox Code Playgroud)

但是然后所有长的单词在行的末尾分开(虽然仅用于chrome ...)

有什么解决方案吗?

提前致谢!

编辑:尝试在该jsfiddle的一行连续输入空格.一旦光标到达最右端,光标就会卡住,并且不会在下一行(chrome)下面

css google-chrome

8
推荐指数
1
解决办法
3212
查看次数

如何在一个文本区内制作div可拖动?

我正在尝试拥有一个可拖动的div,它也可以从其中的textarea中拖出来.

HTML:

<div id="divContainer">
    <textarea id="text"></textarea>
</div>
Run Code Online (Sandbox Code Playgroud)

CSS:

#divContainer {
    position: absolute;
    left: 10px;
    top: 10px;
    width: 100px;
    height: 100px;
    background-color: blue;
}

#text {
    position: absolute;
    left: 5px;
    top: 5px;
    width: 50px;
    height: 50px;
    background-color: green;
}
Run Code Online (Sandbox Code Playgroud)

jQuery的:

$("#divContainer").draggable();
Run Code Online (Sandbox Code Playgroud)

div如果我通过单击该div区域拖动,我可以拖动,但如果我单击该textarea区域则不能拖动.

有办法解决这个问题吗?

这是jsFiddle

javascript jquery

8
推荐指数
1
解决办法
4691
查看次数

php 7 mb_(多字节)函数比5.3(仅限windows)更慢约60%

我的应用程序广泛使用mb_字符串函数,并切换到PHP 7导致整体较慢的应用程序.我将问题跟踪到mb_字符串函数.以下是基准代码和结果:

$time = microtime();
$time = explode(' ', $time);
$start = $time[1] + $time[0];
$startms = $time[0];
    for ($i=0; $i<100000; $i++) {
        $a = mb_strlen("fdsfdssdfoifjosdifjosdifjosdij:?", "UTF-8");
    }
$time = microtime();
$time = explode(' ', $time);
$finish = $time[1] + $time[0];
$finishms = $time[0];
$total_time = round(($finish - $start), 4);
echo "mb_strlen: " . $total_time*1000 ." milliseconds<br/>";

$time = microtime();
$time = explode(' ', $time);
$start = $time[1] + $time[0];
$startms = $time[0];
    for ($i=0; $i<100000; $i++) {
        $a = …
Run Code Online (Sandbox Code Playgroud)

php performance php-7 php-7.1

8
推荐指数
1
解决办法
891
查看次数