我有这个JS代码:
var propertyYield = annualRent / propertyValue * 100.0;
Run Code Online (Sandbox Code Playgroud)
在特定场景中,结果为 4.999。
所以当我这样做时
propertyYield.toFixed(2)
我得到的财产收益率为 5.00。
我想要实现的是实际得到 4.99 而不是 5.00 四舍五入到小数点后两位。
我怎样才能做到这一点?
Promise 异步函数应该如何与事件结合完成?
function f() {
return promisedFunction().then(event => {
let buf = '';
event.on('data', data => {
buf += data.toString()
});
event.on('end', () => {
return buf;
});
// how should I return buf here so that the promise would resolve fine?
});
}
Run Code Online (Sandbox Code Playgroud) 我在 Javascript 运行时中有一个选项卡的方法,我想从扩展的内容脚本中触发该选项卡。从表面上看,这需要在上下文之间传递消息,但我找不到 CS 到选项卡消息的任何文档,只有选项卡到 CS 或 CS 到后台。本质上,我想翻转内容脚本参考的“与嵌入页面的通信”部分。
到目前为止,我window通过注入一个小的 Javascript 有效负载将事件侦听器附加到选项卡(这将在正确类型的消息上触发选项卡方法):
listenerScript = document.createElement('script');
listenerScript.textContent = "window.addEventListener('message',function(ev){console.log('New event: ' + ev);},false);console.log('installed');";
(document.head||document.documentElement).appendChild(listenerScript);
listenerScript.remove();
Run Code Online (Sandbox Code Playgroud)
该侦听器已注册,但我无法弄清楚如何从我的内容脚本触发它。window.postMessage()内容脚本中的似乎没有做任何事情,并且文档仅讨论使用chrome.runtime创建端口,这是用于后台脚本的。
如何以最简单的方式将消息从内容脚本传递到选项卡?
javascript google-chrome-extension dom-events content-script
我正在从 ajax 轮询切换到 socket.io 实时数据推送,但对管理事件的最佳实践有疑问。
假设我有一个像这样的基本服务器:
var Clients = [];
// Event fired every time a new client connects:
io.on('connection', function(socket) {
Clients.push(socket);
// What else should go in here?
// Individual functions for each event?
socket.on('chat message', function(msg){
console.log(':> '+msg);
io.emit('chat message', msg);
});
// When socket disconnects, remove it from the list:
socket.on('disconnect', function() {
var index = Clients.indexOf(socket);
if (index != -1) { Clients.splice(index, 1); }
});
});
Run Code Online (Sandbox Code Playgroud)
在示例中,有一个chat message事件,但理想情况下还有许多其他事件我想实时推送给客户端,例如:
用户发送消息、用户开始/停止打字、用户喜欢帖子、用户邀请您成为朋友/群组成员等等。
我想实时捕获许多事件,但似乎必须有一种比在io.on()声明中塞满所有事件更好的方法。
我研究过 …
我有一个定义事件侦听器的类方法。为简单起见,让我们使用以下代码片段。
function bindEvents() {
document.querySelector('button').addEventListener('click', (e) => {
console.log('clicked!');
});
}
// Initial event binding
bindEvents();
// Rebind events at some point for dynamically created elements
bindEvents();Run Code Online (Sandbox Code Playgroud)
<button type="button">Click</button>Run Code Online (Sandbox Code Playgroud)
仅使用一次时一切正常bindEvents(),但是例如在 ajax 回调中再次调用它会导致侦听器执行两次。所以这意味着在第二次之后bindEvents(),单击按钮将console.log()两次,依此类推。有什么办法可以绕过这种行为吗?
我知道我可以在文档上“动态”绑定事件并使用 进行检查e.target,但在某些情况下我需要mouseenter/ events 并且我认为始终将这些事件放在文档上mouseleave并不是一个好主意。eventListeners
我在某处读过以下内容,但似乎是错误的......
.addEventListener 方法确保相同的函数引用不会多次绑定到相同的元素/事件/捕获组合。
我也使用了options这里的参数https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener,但没有成功。
对不起,如果这个问题在某个地方得到了回答,但我未能在 SO 和搜索引擎中找到答案。
更新:有没有办法覆盖现有的事件监听器,或者应该使用下面建议的kcpremoveEventListener删除旧的事件监听器?有没有更优雅的解决方案来解决这个问题?
我有一个将 ID 参数发送到生成 URL 的函数的事件,但我想发送两个参数而不仅仅是 ID。我也想发名字
使用这段代码我只能发送一个参数,但我需要发送两个。
根据传递一个参数的另一篇文章,我尝试了以下操作:
'<li id="link4"><a href="#" onclick="generateURL(\'' + jsonObject.id + '\');">Line</a></li>'
Run Code Online (Sandbox Code Playgroud)
这是生成我的 URL 的方法
function generateURL(id, name)
{
window.location.href = 'https://www.example'+ id + name + '.com';
}
Run Code Online (Sandbox Code Playgroud)
换句话说,我试图模仿这个:
<a href="#" onclick="generateURL(jsonObject.id, jsonObject.name)></a>
Run Code Online (Sandbox Code Playgroud)
如果我尝试这个:
'<li id="link4"><a href="#" onclick="generateURL(\'' + jsonObject.id + ',' + jsonObject.name + '\');">Line Name</a></li>'
Run Code Online (Sandbox Code Playgroud)
有时候是这样的:
我有以下相当简单的 React 类:
import React from "react"
export default class DoubleClick extends React.Component {
constructor(props) {
super(props);
this.state = {
};
this.handleClick = this.handleClick.bind(this);
this.handleDoubleClick = this.handleDoubleClick.bind(this);
}
handleClick() {
console.log("Click");
}
handleDoubleClick() {
console.log("Double Click");
}
render() {
return (
<div style={{backgroundColor: 'pink'}}>
<div onClick={this.handleClick}>
<span onDoubleClick={this.handleDoubleClick}> Hello </span>
<span onDoubleClick={this.handleDoubleClick}> world. </span>
</div>
</div>
);
}
}
Run Code Online (Sandbox Code Playgroud)
当有人单击外部 div 时,我想调用handleClick,当有人双击任何内部跨度时,我想调用handleDoubleClick,但handleClick也不想调用外部 div 的 。
但是,每当我双击时,handleDoubleClick()都会被调用,但 handleClick也会被调用,即两次。
handleClick()我只想在单击时拨打电话,但不要 …
我想pointer-events:none;使用 Vue.js 动态添加和删除样式属性:
new Vue({
el: '#el',
data: {
toggled: false
},
methods: {
toggle: function () {
this.toggled = !this.toggled;
},
}
})Run Code Online (Sandbox Code Playgroud)
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<div id="el">
<!-- The style disables all mouse events in the div -->
<div style="pointer-events:none;">
...
</div>
<button v-on:click="toggle">Toggle click</button>
</div>Run Code Online (Sandbox Code Playgroud)
我该怎么做?
我试图让按钮将文本从使用“无”隐藏的文本替换为使用“块”显示的文本。我尝试了以下方法,但没有成功
<p id='demo' style = 'display: none'>Hello Javascript</p>
<button type='button' onclick="document.getElementById('demo').style.display='block'" >click me</ button>
Run Code Online (Sandbox Code Playgroud)
我想将事件侦听器转换为 Javascript 并从那里运行。
我有一个用于用户输入的文本字段,但只允许有限的字符集。阻止键盘字符可以很好地使用,keydown首先检查击键,然后event.preventDefault()检查是否未通过。
WIN+PeriodWindows 有一个表情符号菜单,可以通过单击或右键激活。该菜单允许用户单击表情符号图标并将它们插入到文本字段中。
该事件可以通过捕获Input,并且角色会显示出来event.data以供审查。但我无法解决的是如何阻止该操作event.preventDefault()并不能阻止此操作。
这是我尝试过的代码类型的示例。
textbox.addEventListener( "input", event => {
if ( event.data === BAD ) {
event.preventDefault();
}
}, false);
Run Code Online (Sandbox Code Playgroud)
深入研究event数据,我发现cancelableis false,而 for keydownit 是true。
input除了更早地捕捉到这一点之外,是否还有其他事件?
dom-events ×10
javascript ×10
html ×3
events ×2
css ×1
es6-promise ×1
node.js ×1
onclick ×1
promise ×1
reactjs ×1
sockets ×1
vue.js ×1