小编Sus*_*Pal的帖子

如何在粘贴上获取textarea输入字段的新值?

我看到当我尝试在onpaste调用其函数时从textarea字段读取值时,我得到字段的旧值(粘贴操作之前的值),而不是新值(粘贴操作之后的值).

以下是此行为的演示:http://jsfiddle.net/qsDnr/

代码的副本如下:

<!DOCTYPE html>
<html>
<head>
<title>On Paste</title>
<script type="text/javascript">
var textareaElement;
var previewElement;

function update()
{
    previewElement.innerHTML = textareaElement.value;
}

window.onload = function() {
    textareaElement = document.getElementById('textarea');
    previewElement = document.getElementById('preview');
    textareaElement.onpaste = update    
}
</script>
</head>
<body>
<textarea id="textarea">
</textarea>
<div id="preview">
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

您可以使用以下步骤确认行为.

  1. 将字符串复制foo到剪贴板.
  2. 右键单击textarea字段并选择"粘贴".div元素中没有任何内容.
  3. 右键单击textarea字段并再次选择"粘贴".foo出现在div元素中.

因为我想要的div元素始终显示什么是与粘贴操作textarea元素更新,所需的输出foo,并foo foo在步骤2和步骤分别3.

我设法获得所需输出的一种方法是通过延迟update()函数调用window.setTimeout(),而不是

textareaElement.onpaste = update    
Run Code Online (Sandbox Code Playgroud)

我有

textareaElement.onpaste = function() {
    window.setTimeout(update, …
Run Code Online (Sandbox Code Playgroud)

html javascript dom onpaste

7
推荐指数
1
解决办法
4882
查看次数

使用Java 1.5在Windows中获取以太网适配器的IPv4地址

问题

我的Windows系统有多个以太网适配器.鉴于以太网适配器的名称,我需要找到它的IP地址.

例如,ipconfig我系统的命令输出是:

Ethernet adapter GB1:

   Connection-specific DNS Suffix  . : 
   IP Address. . . . . . . . . . . . : 0.0.0.0
   Subnet Mask . . . . . . . . . . . : 0.0.0.0
   Default Gateway . . . . . . . . . : 

Ethernet adapter SWITCH:

   Connection-specific DNS Suffix  . : 
   IP Address. . . . . . . . . . . . : 10.200.1.11
   Subnet Mask …
Run Code Online (Sandbox Code Playgroud)

java windows networking

7
推荐指数
1
解决办法
3515
查看次数

为什么ksh在嵌套命令替换期间无法捕获标准错误?

我有以下shell脚本.

$ cat foo.sh 
foo()
{
    A=$(uname)
    printf "hello "
    bogus
}

echo output: "$(foo 2>&1)"
Run Code Online (Sandbox Code Playgroud)

它以bash,zsh,dash和posh生成以下输出.这是有道理的,因为bogus在系统上没有调用这样的命令.

$ bash foo.sh
output: hello foo.sh: line 5: bogus: command not found
$ zsh foo.sh
output: hello foo:4: command not found: bogus
$ dash foo.sh
output: hello foo.sh: 5: foo.sh: bogus: not found
$ posh foo.sh
output: hello foo.sh:8: bogus: not found
Run Code Online (Sandbox Code Playgroud)

但是在Debian上的ksh中,由于调用bogus命令,它不会打印错误消息.

$ ksh foo.sh
output: hello 
Run Code Online (Sandbox Code Playgroud)

什么地方出了错?

如果您想了解系统详细信息和shell的版本详细信息,请参阅以下输出.

$ uname -a
Linux debian1 3.16.0-4-amd64 #1 SMP Debian …
Run Code Online (Sandbox Code Playgroud)

linux shell ksh posix io-redirection

7
推荐指数
1
解决办法
166
查看次数

为for循环设置IFS然后在for循环中取消设置是否安全?

考虑我打算在任何符合POSIX.1-2004标准的 shell 上运行的以下shell脚本.

log()
{
    echo debug: "$*"
}

A=foo:bar:baz

IFS=:
for i in $A
do
   log token ">>  >>" "$i"
done

unset IFS
# Do more stuff here
Run Code Online (Sandbox Code Playgroud)

我想循环冒号分隔值.在循环中,我想调用一个日志函数,它应该能够回显传递给它的所有参数,并保留每个参数中的多个空格.当我运行此代码时,这是我得到的输出.

debug: token:>>  >>:foo
debug: token:>>  >>:bar
debug: token:>>  >>:baz
Run Code Online (Sandbox Code Playgroud)

好消息是,在这两个空间">> >>"都被保存下来,因为使用的"$*",即引述特殊参数星号作为定义第2.5.2节特殊参数 POSIX.1-2004的.

但坏的是,由于相同的用法,传递给它的三个参数log现在用冒号(the IFS)分隔.

我解决了这个问题unsetIFS的内for循环.

log()
{
    echo debug: "$*"
}

A=foo:bar:baz

IFS=:
for i in $A
do
   unset IFS
   log token ">>  >>" "$i" …
Run Code Online (Sandbox Code Playgroud)

unix linux shell posix

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

onclick vs. onfocus - 输入文本选择行为不同.为什么?

我看到当我在'onfocus'功能的帮助下在文本框中选择文本时,我没有得到我期望的行为.

这是演示网址:http://jsfiddle.net/BquZz/

代码的副本如下:

<!DOCTYPE html>
<html>
<head>
<title>Select all</title>
<script type="text/javascript">
var text;
var log;

function select()
{
    text.select();
    log.innerHTML += ' - select';
}

window.onload = function() {
    text = document.getElementById('text');
    log = document.getElementById('log');
    log.innerHTML = 'start';

    text.onfocus = select;
}
</script>
</head>
<body>
<input type="text" id="text" readonly="readonly" value="hello, world">
<div id="log">
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

我多次重复以下实验.

  1. 单击文本框外部的某个位置以模糊文本框.
  2. 单击文本框以聚焦文本框.

我希望每次在第2步结束时,都应该选择文本框中的字符串"hello,world".但是,这不是我观察到的.使用Debian GNU/Linux(Wheezy)上的Iceweasel 11.0,在替代实验结束时,"hello,world"未被选中.在剩下的实验中,有时候我会看到字符串"hello,world"被完全选中,有时候会被部分选中.使用Debian GNU/Linux(Wheezy)上的Chrome 18.0.1025.33测试版,我很少得到理想的结果.大多数时候,没有选择任何东西.

我知道解决这个问题的方法.更改text.onfocus = selecttext.onclick = select.使用select()调用的函数onclick,我得到预期的结果.这是一个演示URL,使用'onclick'显示所需的结果: …

html javascript onclick onfocus

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

如何使用Windows批处理脚本将以"1"结尾的行写入文件?

简短的问题

如何在将输出重定向到文件的同时"foo 1"使用echo命令回显字符串,以便将整个字符串写入文件?

C:\>echo foo 1>foo.txt

C:\>type foo.txt
foo

C:\>xxd -g1 a.txt
0000000: 66 6f 6f 20 0d 0a                                foo ..
Run Code Online (Sandbox Code Playgroud)

上面的实验表明只有"foo "写入文件,因为"1"命令中的命令被解释为重定向操作符的一部分,1>.请注意,这echo foo 1 > foo.txt不是解决方案,因为它会"foo 1 "在字符串中写入带有不必要的尾随空格的文件.

很长的问题

请考虑以下Windows批处理脚本.

@echo off
call :log "start script"
call :log "foo"
call :log "end script"
goto :eof

:log
echo %~1>>log.txt
goto :eof
Run Code Online (Sandbox Code Playgroud)

当我执行此脚本时,它的行为符合要求,即在log.txt中写入三行日志.

C:\>foo

C:\>type log.txt
start script
foo
end script
Run Code Online (Sandbox Code Playgroud)

现在考虑以下脚本,其中第二行日志已被修改"foo""foo 1". …

batch-file

5
推荐指数
2
解决办法
318
查看次数

Justify JavaScript更新了父div元素中的子div元素

我试图显示从容器div元素的一个边缘到另一个边缘均匀展开的三个div元素.

这是HTML代码.

<body>
    <div id="container" width="50%">
        <div>foo</div>
        <div>bar</div>
        <div>baz</div>
        <div class="stretch"></div>
    </div>
</body>
Run Code Online (Sandbox Code Playgroud)

这是CSS代码.

#container {
    margin: 10%;
    background: lightblue;
    text-align: justify;
}

#container div {
    display: inline-block;
    width: 30%;
    background: gray;
}

#container div.stretch {
    width: 100%;
    height: 0;
}
Run Code Online (Sandbox Code Playgroud)

这可以正常工作,如下所示:http://jsfiddle.net/zVf4j/

但是,当我尝试使用以下JavaScript更新容器div时,子div元素不再从容器div元素的边缘展开.

var containerDiv = document.getElementById('container')
containerDiv.innerHTML =
    '<div>fox</div>' +
    '<div>bay</div>' +
    '<div>baz</div>' +
    '<div class="stretch"></div>'
Run Code Online (Sandbox Code Playgroud)

text-align: justify;在这种情况下,CSS中的属性似乎没有任何效果.这个问题可以在这里看到:http://jsfiddle.net/b5gBM/

我有两个问题.

  1. 为什么使用JavaScript更新子div元素的位置会发生变化?
  2. 我们如何解决这个问题,以便将子div元素从容器div的一个边缘均匀地分散到另一个边缘,即使它们是用JavaScript更新的?

html javascript css

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

什么可能导致Java编译器在解析注释时失败?

以下代码是有效的Java程序.

public class Foo
{
    public static void \u006d\u0061\u0069\u006e(String[] args)
    {
        System.out.println("hello, world");
    }
}
Run Code Online (Sandbox Code Playgroud)

main识别符是使用Unicode转义序列写入.它编译并运行良好.

$ javac Foo.java && java Foo
hello, world
Run Code Online (Sandbox Code Playgroud)

虽然这个问题可能不需要以下细节,但我会分享它,以防有人对此感到好奇.我在Debian 8.0上使用OpenJDK的Java编译器,但我在这个问题中要求的应该适用于任何Java编译器.

$ javac -version
javac 1.7.0_79
$ readlink -f $(which javac)
/usr/lib/jvm/java-7-openjdk-amd64/bin/javac
Run Code Online (Sandbox Code Playgroud)

下面的程序是一个错误,因为以前写的转义序列mmain是无效的.

public class Foo
{
    public static void \u6d\u0061\u0069\u006e(String[] args)
    {
        System.out.println("hello, world");
    }
}
Run Code Online (Sandbox Code Playgroud)

编译器抱怨非法的unicode序列.

$ javac Foo.java && java Foo
Foo.java:3: error: illegal unicode escape
    public static void \u6d\u0061\u0069\u006e(String[] args)
                           ^
Foo.java:3: error: invalid method …
Run Code Online (Sandbox Code Playgroud)

java unicode grammar comments lexical-analysis

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

在工作进程启动之前将数据放入输入队列时,工作进程在requests.get()上崩溃

在macOS High Sierra(版本10.13.6)中,我运行一个Python程序,该程序执行以下操作:

  • 启动一个工作进程,该工作进程使用中的数据(URL字符串)multiprocessing.Queue
  • 辅助进程使用该requests包发送HTTP请求,即,它进行了requests.get()调用。
  • 甚至在启动工作进程之前,某些数据(URL字符串)就会被送入队列。

满足上述条件的程序将导致工作进程崩溃,并显示以下错误:

objc[24250]: +[__NSPlaceholderDate initialize] may have been in progress in another thread when fork() was called.
objc[24250]: +[__NSPlaceholderDate initialize] may have been in progress in another thread when fork() was called. We cannot safely call it or ignore it in the fork() child process. Crashing instead. Set a breakpoint on objc_initializeAfterForkError to debug.
Run Code Online (Sandbox Code Playgroud)

我已阅读以下主题:

这些线程专注于用户的解决方法。解决方法是定义此环境变量:

OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES
Run Code Online (Sandbox Code Playgroud)

在这个问题中,我想理解为什么只有某些条件会产生错误,而其他条件却没有,并且如何解决此问题而不给OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES用户增加定义环境变量的负担。

问题的最小例子

import multiprocessing as mp
import …
Run Code Online (Sandbox Code Playgroud)

python fork python-multithreading python-requests macos-high-sierra

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

获得md5校验和的完成百分比

我目前正在获得md5校验和,如下所示:

>>> import hashlib
>>> f = open(file)
>>> m = hashlib.md5()
>>> m.update(f.read())
>>> checksum = m.hedxigest()
Run Code Online (Sandbox Code Playgroud)

我需要返回大型视频文件的校验和,这需要几分钟才能生成.如何实现百分比计数器,以便在运行时打印每个百分比的完成百分比.就像是:

>>> checksum = m.hedxigest()
1% done...
2% done...
etc.
Run Code Online (Sandbox Code Playgroud)

python md5 cryptography

3
推荐指数
1
解决办法
725
查看次数

在一行shell中重命名多个文件

问题

在目录中有以下格式的文件:*-foo-bar.txt.

示例目录:

$ ls *-*
asdf-foo-bar.txt  ghjk-foo-bar.txt  l-foo-bar.txt     tyui-foo-bar.txt
bnm-foo-bar.txt   iop-foo-bar.txt   qwer-foo-bar.txt  zxcv-foo-bar.txt
Run Code Online (Sandbox Code Playgroud)

所需目录:

$ ls *.txt
asdf.txt  bnm.txt  ghjk.txt  iop.txt  l.txt  qwer.txt  tyui.txt  zxcv.txt
Run Code Online (Sandbox Code Playgroud)

解决方案1

我想到的第一个解决方案看起来有点像这个丑陋的黑客:

ls *-* | cut -d- -f1 | sed 's/.*/mv "\0-foo-bar.txt" "\0.txt"/' > rename.sh && sh rename.sh
Run Code Online (Sandbox Code Playgroud)

上面的解决方案动态创建一个脚本来重命名文件.ls根据http://mywiki.wooledge.org/ParsingLs,该解决方案还尝试解析其输出不是一件好事.

解决方案2

使用像这样的shell脚本可以更优雅地解决这个问题:

for i in *-*
do
    mv "$i" "`echo $i | cut -f1 -d-`.txt"
done
Run Code Online (Sandbox Code Playgroud)

上述解决方案使用循环重命名文件.

有没有办法在一行中解决这个问题,这样我们就不必显式编写循环脚本,或生成脚本,或调用新的或当前的shell(即避免使用sh,bash ,.等命令) ?

bash shell

3
推荐指数
1
解决办法
5911
查看次数

当我使用 SetWindowsHookEx WH_KEYBOARD_LL 交换按键时,为什么我的程序会陷入键盘输入事件过多的循环?

我正在尝试为 Windows 系统编写一个交换AB键的程序,即当我按下该A键时,B就会输入内容,反之亦然。

为此,我首先将A键映射为与键类似的行为B。这是我写的代码。

#include <stdio.h>
#include <windows.h>

HHOOK hook;

LRESULT CALLBACK keyboardHook(int nCode, WPARAM wParam, LPARAM lParam)
{
    KBDLLHOOKSTRUCT *p = (KBDLLHOOKSTRUCT *) lParam;
    DWORD newVkCode;
    INPUT inputs[1];
    UINT ret;

    char wParamStr[16];
    char vkStr[16] = "";

    if (wParam == WM_KEYDOWN)
        strcpy(wParamStr, "KEYDOWN");
    else if (wParam == WM_KEYUP)
        strcpy(wParamStr, "KEYUP");
    else if (wParam == WM_SYSKEYDOWN)
        strcpy(wParamStr, "SYSKEYDOWN");
    else if (wParam == WM_SYSKEYUP)
        strcpy(wParamStr, "SYSKEYUP");
    else
        strcpy(wParamStr, "UNKNOWN");

    if …
Run Code Online (Sandbox Code Playgroud)

c windows keyboard-hook visual-studio

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

什么时候PHP flock需要一个特殊的锁文件或'c'模式的打开文件?

引用PHP flock文档:

因为flock()需要一个文件指针,你可能必须使用一个特殊的锁文件来保护对你想要截断的文件的访问,方法是在写模式下打开它(fopen()带有"w"或"w +"参数).

引用PHP fopen文档:

'c' - 打开文件只写.如果该文件不存在,则创建该文件.如果存在,则既不截断(与'w'相反),也不会调用此函数失败(如'x'的情况).文件指针位于文件的开头.如果在尝试修改文件之前需要获取咨询锁(请参阅flock()),这可能很有用,因为使用'w'可能会在获取锁之前截断文件(如果需要截断,则ftruncate()可以在请求锁之后使用).

我试图flock通过fopen'w'模式下打开文件来解决文件被截断后获取咨询锁的问题.在什么情况下,人们会想要使用一个特殊的锁文件来保护对一个打算在写入模式下打开它的文件的访问?

php locking file

0
推荐指数
1
解决办法
1107
查看次数