标签: dom-events

在 JavaScript 中获取两位小数,而不四舍五入到下一个更大的数字

我有这个JS代码:

var propertyYield = annualRent / propertyValue * 100.0;
Run Code Online (Sandbox Code Playgroud)

在特定场景中,结果为 4.999。

所以当我这样做时

propertyYield.toFixed(2)

我得到的财产收益率为 5.00。

我想要实现的是实际得到 4.99 而不是 5.00 四舍五入到小数点后两位。

我怎样才能做到这一点?

javascript dom-events

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

将 Promise 与事件结合起来

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 events promise dom-events es6-promise

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

从内容脚本向页面 Javascript 发送消息

我在 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

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

处理 Socket.io 事件的最佳实践?

我正在从 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()声明中塞满所有事件更好的方法。

我研究过 …

javascript sockets events node.js dom-events

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

重新绑定 JavaScript 事件并触发两次 addEventListener

我有一个定义事件侦听器的类方法。为简单起见,让我们使用以下代码片段。

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删除旧的事件监听器?有没有更优雅的解决方案来解决这个问题?

javascript dom-events

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

如何通过 HTML onclick 事件发送两个参数?

我有一个将 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)

有时候是这样的:

未收到 NAME 参数

html javascript dom-events

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

防止双击被解释为两次单击?

我有以下相当简单的 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()我只想在单击时拨打电话,但不要 …

javascript onclick event-handling dom-events reactjs

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

使用 Vue.js 的动态样式

我想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)

我该怎么做?

html javascript dom-events vue.js

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

使文本在按钮单击时出现/消失

我试图让按钮将文本从使用“无”隐藏的文本替换为使用“块”显示的文本。我尝试了以下方法,但没有成功

<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 并从那里运行。

html javascript css dom-events

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

阻止表情符号插入文本字段

我有一个用于用户输入的文本字段,但只允许有限的字符集。阻止键盘字符可以很好地使用,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除了更早地捕捉到这一点之外,是否还有其他事件?

javascript dom-events

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