相关疑难解决方法(0)

删除使用bind添加的事件侦听器

在JavaScript中,使用bind()删除作为事件侦听器添加的函数的最佳方法是什么?

(function(){

    // constructor
    MyClass = function() {
        this.myButton = document.getElementById("myButtonID");
        this.myButton.addEventListener("click", this.clickListener.bind(this));
    };

    MyClass.prototype.clickListener = function(event) {
        console.log(this); // must be MyClass
    };

    // public method
    MyClass.prototype.disableButton = function() {
        this.myButton.removeEventListener("click", ___________);
    };

})();
Run Code Online (Sandbox Code Playgroud)

我能想到的唯一方法就是跟踪每个添加了bind的侦听器.

以上示例使用此方法:

(function(){

    // constructor
    MyClass = function() {
        this.myButton = document.getElementById("myButtonID");
        this.clickListenerBind = this.clickListener.bind(this);
        this.myButton.addEventListener("click", this.clickListenerBind);
    };

    MyClass.prototype.clickListener = function(event) {
        console.log(this); // must be MyClass
    };

    // public method
    MyClass.prototype.disableButton = function() {
        this.myButton.removeEventListener("click", this.clickListenerBind);
    };

})();
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来做到这一点?

javascript events bind listener

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

将额外参数传递给回调函数

我有一个函数callWithMagic,它将一个回调函数作为参数,并用一个参数调用它.

const callWithMagic = callback => {
  const magic = getMagic();
  callback(magic);
};
Run Code Online (Sandbox Code Playgroud)

我还有一个函数processMagic,它有两个参数:magictheAnswer.

const processMagic = (magic, theAnswer) => {
  someOtherMagic();
};
Run Code Online (Sandbox Code Playgroud)

我想将函数processMagic作为参数传递给callWithMagic,但我也希望42将第二个参数传递theAnswerprocessMagic.我怎样才能做到这一点?

callWithMagic(<what should I put here?>);
Run Code Online (Sandbox Code Playgroud)

javascript parameters function callback

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

如何使onclick函数仅执行一次?

我的按钮上有用于Google Analytics(分析)的代码。我只需要执行一次它,这样用户就不能通过多次按下按钮来更改统计信息。我尝试了类似主题的解决方案,但是它们不起作用。请帮忙。这是我的代码。

<script>
    function klikaj(i) {
        gtag('event', 'first-4', {
            'event_category' : 'cat-4',
            'event_label' : 'site'
        });
    }

    document.body.addEventListener("click", klikaj(i), {once:true})
</script>


<div id="thumb0" class="thumbs" onclick="klikaj('rad1')">My button</div>
Run Code Online (Sandbox Code Playgroud)

html javascript dom-events

20
推荐指数
3
解决办法
1217
查看次数

console.log()在Safari 6.0 Web Inspector中不起作用

console.log('hi');

undefined
Run Code Online (Sandbox Code Playgroud)

6.0中有类似的实现吗?或者我做错了什么?

javascript safari6

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

addEventListener在没有我甚至要求的情况下调用该函数

所以我们有一个页面:

<span id='container'>
    <a href='#' id='first'>First Link</a>
    <a href='#' id='second'>Second Link</a>
</span>
Run Code Online (Sandbox Code Playgroud)

并想要添加一些点击事件:

first.addEventListener('click', function(){alert('sup!');})
Run Code Online (Sandbox Code Playgroud)

奇迹般有效!但是,当您将第二个参数设为外部函数时:

function message_me(m_text){
    alert(m_text)
}

second.addEventListener('click', message_me('shazam'))
Run Code Online (Sandbox Code Playgroud)

它立即调用该函数.我怎么能阻止这个?很烦人!

这是一个现场演示:http://jsfiddle.net/ey7pB/1/

javascript addeventlistener

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

如何在javascript中用命名函数替换匿名函数?

嗨,所以我创建了这个代码很好.

document.getElementById("file").addEventListener('click', 


function () {

var textArea = document.getElementById("newTextArea");

//Retrieve the selected text :
var selText = window.getSelection();
var text = textArea.innerHTML;
// I need to make a condition here.  If the text doesn't have a span tag then do this: 
if (document.querySelector('.test') === null) {
    textArea.innerHTML = text.replace(selText, '<span class="test">'+selText+'</span>');
// if the text does have a span tag then remove the span tag
} else if (document.querySelector('.test') !== null) {
    var deSelText = document.querySelector('.test');
    var highlightedText = deSelText.innerHTML; …
Run Code Online (Sandbox Code Playgroud)

javascript function

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

JavaScript onChange无法使用DOM元素

尝试在JavaScript中使用onchange监听器输入时遇到问题:

var apple = document.getElementById("apple");
apple.addEventListener("change", validate("apple"));

function validate(fruitName){
    var qty = parseInt(document.getElementById(fruitName).value);
    console.log(qty);
}
Run Code Online (Sandbox Code Playgroud)

每次当用户输入'apple'输入内容时,我都会尝试检查,我会在控制台上打印数量.但是通过这样做,它只在第一次通过打印NaN来刷新浏览器时才运行,即使我更改了'apple'的输入也不行.

有任何想法吗?

提前致谢.

javascript

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