标签: javascript-events

jQuery卸载事件仅用于关闭窗口而不用于链接导航

我在关闭页面时使用此代码注销用户,但用户也会在点击其他链接(同一网站)时注销:

  $( window ).unload(function() {
    $.ajax({url:"?logout&leave=yes", async:false})
  });
Run Code Online (Sandbox Code Playgroud)

有没有办法区分链接导航和真实页面关闭?

编辑:

我目前正在实施此解决方案,但它缺乏检测页面重新加载

  $('a').click(function(){
      var url = $(this).attr("href");
      window.onbeforeunload = null;
      $(window).unbind('beforeunload');
      window.location = url;
  });
Run Code Online (Sandbox Code Playgroud)

ajax jquery event-handling javascript-events

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

在javascript中更改变量引用

我很难搞清楚如何将变量重新分配给新函数.

我有两个分配给变量的匿名函数,我希望"first"在调用一次后将其自身分配给"after".

在Firefox中使用.toSource时,似乎首先要重新分配,但是"单击处理程序中的第一个仍然是引用或调用在运行时创建的第一个.

为什么是这样?

JS

var after = function() {
    alert("AFTER");
}

var first = function() {
    alert("FIRST");
    //alert(first.toSource());
    first = after;
}

$(".order").click( first );
Run Code Online (Sandbox Code Playgroud)

HTML

<button type="button" class="order">Order</button>
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/E2R2R/2/

javascript jquery javascript-events

0
推荐指数
2
解决办法
46
查看次数

JQuery on('contextmenu')用于body,但是特殊的一个类

我有一个大div(整页),里面有一个较小的div:

<div class="all">
    <div class="tiny"></div>
</div>
Run Code Online (Sandbox Code Playgroud)

div.all对我来说就像一块板子,上面div.tiny有一个小矩形.我想在任何时候(或什么都没有)div.all获得RMB 时显示我的特殊上下文菜单.但是当我打开RMB时div.tiny,我不想执行那个"默认"程序,而是执行一些(甚至更特殊的)代码.我尝试过:

jQuery('body').on("contextmenu", ".all", function(){ /* special stuff */});

jQuery('body').off("contextmenu", ".all .tiny"); /* <- tried to turn off my...*/
/*...special stuff for .tiny that way*/

jQuery('body').on("contextmenu", ".tiny", function(){ 
    /* even more special stuff */
});
Run Code Online (Sandbox Code Playgroud)

当我运行它,RMB div.all或其中的元素时,我得到了"特殊的东西".但是,当我点击人民币时,div.tiny我会得到"特殊的东西" (我不想要的)和"更特别的东西"(它太特别了,我怎么也不想要它!).

有解决方案吗

为了让生活困难,我不能改变(第一顺序jQuery()div.all对,比我的功能div.tiny) -在我真正的项目的事情比较复杂,我必须保持这种为了某些原因(还是它的外观相当合理的-从全球事件精确的).

jquery events contextmenu javascript-events

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

循环中的addEventListener

我不明白为什么addEventListener只能在循环之外工作.使用以下代码,我在JsFiddle(http://jsfiddle.net/E7gaZ/1/)中创建了示例:

window.addEventListener('load', function (){
    document.getElementById('myId').addEventListener(
        'click', myHandler, false
    );
    var myClass = document.getElementsByClassName('myClass');
    for(var i=0; i<myClass.length; i++) {
        myClass[i].addEventListener("onclick", myHandler, false);
    }
});
function myHandler(ev) {
    alert(ev.target.innerHTML);
    ev.preventDefault();
}
Run Code Online (Sandbox Code Playgroud)

在警告"myId"时单击"myId"链接并阻止页面重新加载,而其他链接将不会调用myHandler.

以下方法似乎运行良好(仍在window.load事件内部(http://jsfiddle.net/E7gaZ/2/):

document.getElementById('myId').onclick = myHandler;
var myClass = document.getElementsByClassName('myClass');
for(var i=0; i<myClass.length; i++) {
    myClass[i].onclick = myHandler;
}
Run Code Online (Sandbox Code Playgroud)

知道为什么吗?

编辑:我为什么要用addEventListener而不是.onclick =?因为我可以在同一个事件上添加多个侦听器.

编辑:谢谢你的解决方案,伙计们.作为结论,它正在研究myId因为我使用了正确的语法(click)而不是*myClass,因为语法错误(onclick).

javascript javascript-events

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

在JavaScript中检索事件回调中的对象的最佳方法是什么

通常我在JavaScript中使用对象来保存数据,但事件侦听器不允许辅助指针来检索这些对象.

在事件回调中检索对象指针的最佳方法是什么?(请不要第三方图书馆)

例:

function MyClass()
{
    this.number = Math.random();
    this.button = document.createElement('div');
    this.button.appendChild(document.createTextNode('Show number'));
    document.body.appendChild(this.button);
    // THIS FOLLOWING LINE REQUIRE CHANGES
    this.button.addEventListener('click', MyClass.prototype.listener);

}
MyClass.prototype.listener = function (e)
{
    // HERE, "THIS" DO NOT POINT TO MY OBJECT
    alert( this.number );
}
testMyClass1 = new MyClass();
testMyClass2 = new MyClass();
Run Code Online (Sandbox Code Playgroud)

目前,我使用静态数组来保存指针,但这很难维护:

//New constructor, first try    
function MyClass()
{
    this.number = Math.random();
    this.button = document.createElement('div');
    this.button.appendChild(document.createTextNode('Show number'));
    document.body.appendChild(this.button);
    if (undefined===MyClass.prototype.register) MyClass.prototype.register = [];
    this.id = MyClass.prototype.register.length;
    MyClass.prototype.register.push(this);
    this.callback = new Function( …
Run Code Online (Sandbox Code Playgroud)

javascript oop javascript-events

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

仍然在jQuery中的事件和事件处理程序之间混淆

有人可以帮我理解以下示例中的"事件"和"事件处理程序"究竟是什么?根据www.w3schools.com,这里列出了一些常见事件

在此输入图像描述

那么为什么有些人仍然会说Click事件处理程序?是Click 事件事件处理程序

1.

$( "p" ).click(function() {
       alert("Which One is Event and which one Event Handler");
});
Run Code Online (Sandbox Code Playgroud)

2.

$("p").on("click",function(){
       alert("Which One is Event and which one Event Handler");
});
Run Code Online (Sandbox Code Playgroud)

3.

$("p").css("background-color","yellow");
Run Code Online (Sandbox Code Playgroud)

谢谢

javascript jquery javascript-events

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

用户关闭窗口时清除本地存储

如何在浏览器的所有选项卡中关闭我的网站时清除本地存储?意味着如果我的用户在多个选项卡中打开我的网站,并且当用户关闭浏览器或逐个关闭选项卡时,我需要在最后一个选项卡关闭事件上清除本地存储(例如,在"beforeunload"事件中).

有人有想法这样做吗?

谢谢

javascript javascript-events local-storage

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

无法使用javascript/jquery打开新选项卡或窗口

请注意,这不适用于实时网站; 这只是我自己丰富的一些实验.我在Mac OSX 10.9.3上运行Chrome版本35.0.1916.153(最新).

正如许多其他人试图做的那样,我正试图让javascript在新标签中打开一个链接.那里有很多例子,但我不能让它们中的任何一个起作用.最有希望的想法似乎是模拟锚点上的cmd +点击.发生click事件,并且事件对象的metaKey属性设置为true,正如我在添加单击处理程序时所看到的那样,但是没有打开URL:没有新窗口,没有新选项卡.

HTML:

<a id="still" href="gv__.html?pictureMode=still" target="_blank">still</a>
<a id="motion" href="gv__.html?pictureMode=motion" target="_blank">motion</a>
Run Code Online (Sandbox Code Playgroud)

JS:

$(document).ready(function() {
    var e = $.Event( "click", { metaKey: true } );

    $("a#motion").trigger(e);
    $("a#still").trigger(e);
    $("a#motion").trigger(e);
    $("a#still").trigger(e);
});
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

html javascript jquery javascript-events

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

将点击事件绑定到D3元素

以下结果导致在nodeClick()页面加载时调用该方法(不单击).为什么?如何在单击元素时触发nodeClick()函数?码:

var node = svg.selectAll(".node")
    .on("click", nodeClick());
Run Code Online (Sandbox Code Playgroud)

在上下文中

var width = 960,
   height = 500;

var color = d3.scale.category10();

var nodes = [],
    links = [];

var force = d3.layout.force()
    .nodes(nodes)
    .links(links)
    .charge(-400)
    .linkDistance(120)
    .size([width, height])
    .on("tick", tick);

var svg = d3.select("body").append("svg")
    .attr("width", width)
    .attr("height", height);

var node = svg.selectAll(".node")
    .on("click", nodeClick()),
    link = svg.selectAll(".link");

function start() {
    link = link.data(force.links(), function(d) { return d.source.id + "-" + d.target.id; });
    link.enter().insert("line", ".node").attr("class", "link");
    link.exit().remove();

    node = node.data(force.nodes(), function(d) …
Run Code Online (Sandbox Code Playgroud)

javascript events javascript-events d3.js

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

如何在javascript中初始化一个类对象

我有一个java脚本类说"myjavascript.js".我有以下课程

var myClass= function () {
        this.property2 = '';
        this.property3 = '';
        this.property4 = '';
        this.property5 = '';

        this.say() = function () {
            alert('Say Hello');
        }
Run Code Online (Sandbox Code Playgroud)

我有一个在某个事件上触发的功能.

function myFunction(){
var myClassObj= new myClass();
myClassObj.property2 = 'property2' ;
myClassObj.property3 = 'property2' ;
myClassObj.property4 = 'property2' ;
myClassObj.property5 = 'property2 ';
myClassObj.say();
}
Run Code Online (Sandbox Code Playgroud)

在触发功能时,我收到此错误

未捕获的TypeError:undefined不是函数

请记住,两者都在同一个文件中.

javascript javascript-events

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