我在关闭页面时使用此代码注销用户,但用户也会在点击其他链接(同一网站)时注销:
$( 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) 我很难搞清楚如何将变量重新分配给新函数.
我有两个分配给变量的匿名函数,我希望"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)
我有一个大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) -在我真正的项目的事情比较复杂,我必须保持这种为了某些原因(还是它的外观相当合理的-从全球事件精确的).
我不明白为什么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中使用对象来保存数据,但事件侦听器不允许辅助指针来检索这些对象.
在事件回调中检索对象指针的最佳方法是什么?(请不要第三方图书馆)
例:
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) 有人可以帮我理解以下示例中的"事件"和"事件处理程序"究竟是什么?根据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)
谢谢
如何在浏览器的所有选项卡中关闭我的网站时清除本地存储?意味着如果我的用户在多个选项卡中打开我的网站,并且当用户关闭浏览器或逐个关闭选项卡时,我需要在最后一个选项卡关闭事件上清除本地存储(例如,在"beforeunload"事件中).
有人有想法这样做吗?
谢谢
请注意,这不适用于实时网站; 这只是我自己丰富的一些实验.我在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)
我究竟做错了什么?
以下结果导致在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) 我有一个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不是函数
请记住,两者都在同一个文件中.