当前位置: 首页 > 知识库问答 >
问题:

如何将jQuery代码转换为JavaScript?

邵阳辉
2023-03-14

jQuery:

var isResizing = false,
    lastDownX = 0;

$(function () {
    var container = $('#container'),
        top = $('#top-panel'),
        handle = $('#drag');

    handle.on('mousedown', function (e) {
        isResizing = true;
        lastDownX = e.clientY;
    });

    $(document).on('mousemove', function (e) {
        // we don't want to do anything if we aren't resizing.
        if (!isResizing) 
            return;
        var offsetRight = top.height() + (e.clientY - container.offset().top);

        top.css('top', offsetRight);
    }).on('mouseup', function (e) {
        // stop resizing
        isResizing = false;
    });
});

JavaScript:

var isResizing = false
// eslint-disable-next-line no-unused-vars
var lastDownX = 0

function resizeVerticallyInit () {
  var top = document.querySelector('#topology-container')
  var handle = document.querySelector('#drag')

  handle.addEventListener('mousedown', function (e) {
    isResizing = true
    lastDownX = e.clientY
  })

  document.addEventListener('mousemove', function (e) {
    // we don't want to do anything if we aren't resizing.
    if (!isResizing) {
      return
    }
    var offsetRight = top.height() + 20

    document.querySelector('#topology-container').style.top = offsetRight
  })

  document.addEventListener('mouseup', function (e) {
    // stop resizing
    isResizing = false
  })
}

mounted () {
  ...
  resizeVerticallyInit()
}

如您所见,我在mounted()生命周期方法中使用vue.js组件中的JavaScript函数。

我试过转换,但没有用。

首先我要说:

// eslint-disable-next-line no-unused-vars
var lastDownX = 0

我不知道为什么它抱怨lastDownX没有使用。

第二个是错误:

"[Vue warn]: Error in mounted hook: "TypeError: Cannot read property 'addEventListener' of null"

它在抱怨:

  handle.addEventListener('mousedown', function (e) {
    isResizing = true
    lastDownX = e.clientY
  })

有人能帮忙转换吗?

共有1个答案

孟鹤龄
2023-03-14

如果元素不在DOM中,Document.QuerySelector方法的第一个将返回NULL。 不能对NULL调用AddEventListener。 在jquery中,它能够工作,因为jquery构造了一个单独的对象(称为jquery对象)。 jQuery对象看起来有点像这样:

{
  0: {...} // HTMLElement reference
  length: 1
} // jQuery object

该对象公开了一个jQuery API,该API具有用于事件处理的on方法(无论是否存在实际的DOM元素都可用)。 这是jQuery的一个优点(也是一个缺点)。

而查询选择器方法则返回HtmlElement。 如果该元素在DOM中不存在,则返回null

现在假设元素将在一定时间后出现在DOM中,您可以做两件事:

  1. 等待元素出现在DOM中,一旦它可用,就添加一个侦听器函数
  2. 在JavaScript中使用live事件(事件委派)。

我将向您展示第二种方法:

null

setTimeout(() => {
  document.querySelector('#container').innerHTML = `<button id="btn">Click</button>`;
}, 3000);

document.addEventListener('click', (e) => {
  if (e.target.id === 'btn') {
    alert('Click works!');
  }
});
<div id="container">
  A button will appear after 3 seconds. However, click event would still work.
</div>
 类似资料:
  • 问题内容: 我刚刚开始使用Java 8,并且正在使用以下代码片段: 如何将其转换为Lambda样式? 问题答案: 如果是 功能界面 ,则可以 这是您问题中其他类的存根实现的完整示例:

  • 问题内容: 我正在将Java库移植到C#。我使用的是Visual Studio 2008,因此没有停止使用的Microsoft Java语言转换助手程序(JLCA)。 我的方法是创建一个与Java库具有类似项目结构的新解决方案,然后将Java代码复制到ac#文件中,并将其逐行转换为有效的c#。考虑到我觉得Java易于阅读,两种语言之间的细微差别使我感到惊讶。 有些事情很容易移植(命名空间,继承等)

  • 我目前正在python中使用Google Vision API检测图像中的汉字,但我发现Google将返回python源代码(如\XE7\X80\X86\XE7\XAB\X91),而不是一些人类可读字符串。 我如何将它转换成utf-8格式的人类可读文本? Requests.Exceptions.ConnectionError除外:打印(“Request Error”) 谢谢你

  • 问题内容: 好的,所以我有一个来自EEG扫描的数据文件(一个二进制文件,data.eeg),在matlab中,用于读取文件并绘制部分数据的代码如下所示: 这是我的“翻译”尝试 这就是让我感到困惑的地方。根据文档,matlab的fread是一种通过fread(loaded_file,size,data_type)读取二进制文件的方法。python中的替代方法是使用numpy的fromfile并使用内

  • 问题内容: 这是我的ajaxHandler,我想将此转换为本地javascript,即使用XMLHttpRequest,但我不明白如何转换。 我已经尝试像这样转换上面的代码 问题答案: 我提取了Jquery的ajax函数,无需使用jquery就可以工作。 并替换为 没有JQuery的JQuery的ajax函数:

  • 问题内容: 我有一个用Scala编写的应用程序,我的一些团队成员希望使用Java版本。这是一个演示应用程序,可以使用用Scala编写的另一个API,并且他们希望该应用程序的Java版本能够使用Java中的API。但是,该应用程序有些大,我不想用Java手动重排代码(他们也不想学习Scala)。是否有任何工具可以从Scala代码自动生成(可读)Java代码? 问题答案: 他们希望应用程序的Java版

  • 问题内容: Web服务团队为我提供了此C#代码,该代码公开了一些我计划使用的Web服务。我的密码需要使用此代码进行加密,以便Web服务知道如何在其末尾对其进行解密。 我正在使用Java来使用此Web服务,现在,在将#C代码转换为Java代码时遇到问题,因为该Web服务无法正确解密我的密码。 这是我目前的失败尝试: 我做错什么了?非常感谢。 2013-08-07-更新 我在阅读此网站时,意识到我的模

  • 我正在研究lib,它使用了很多文件系统函数。 我想要的是,我的函数根据errno返回各种错误代码(而不仅仅是-1作为错误),以防文件系统函数失败。 虽然我可以直接使用errno值,但我希望在函数,错误代码和系统errno之间创建一些抽象层(例如,我的错误值从-1000开始,并且是负值,而errno值是正值)。 我的问题是什么是最好的实现方式。 现在我看到两种可能的解决方案: 使用带有错误代码的枚举