我正在构建一个捕获鼠标点击的小应用程序.我在jquery中编写了原型,但由于它是一个专注于速度的小应用程序,嵌入jquery只使用一个函数将是一个过度杀伤力.
我试图从JavascriptKit改编这个例子:
document.getElementById("alphanumeric").onkeypress=function(e){
//blah..blah..blah..
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试时它没有用
document.getElementsByTagName("x").onclick
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我有一些我可以用.click()函数选择的元素,它们会突出显示.上面有菜单,有一些动作.我想点击任何元素而不是菜单时取消突出显示.
结构体:
<body>
<div id="menu">
</div>
<div id="elements">
/* selectable elements here */
</div>
</body>
Run Code Online (Sandbox Code Playgroud)
可执行示例
$().ready(function(){
$("#elements a").click(function(){
$(this).css('color', 'red');
return false;
});
$(document).click(function(e) {
if ( $(e.target).closest('#menu').length === 0 ) {
$("#elements a").css('color', 'blue');
}
});
});Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="menu">
<a href="#">Menu 1</a>
<a href="#">Menu 2</a>
<a href="#">Menu 3</a>
</div>
<div id="elements">
<a href="#">Element 1</a>
<a href="#">Element 2</a>
<a href="#">Element 3</a>
</div>
<div>
Click any element to highlight it. Click anywhere to reset highlighting. Click menu to …Run Code Online (Sandbox Code Playgroud)我正在尝试使用jQuery来做类似的事情
if(jQuery('#id').click) {
//do-some-stuff
} else {
//run function2
}
Run Code Online (Sandbox Code Playgroud)
但我不确定如何使用jQuery做到这一点?任何帮助将不胜感激.
编辑:我正在尝试运行一个函数,如果已经点击了#id,特别是它没有被点击,那么运行函数2?即我需要首先检查#id在运行之前是否已被点击function2?
我之前做过类似的事情,我知道这非常接近.我只是想让它按钮增加javascript变量,然后函数显示新值.
<html>
<head>
<title>Space Clicker</title>
</head>
<body>
<script type="text/javascript">
int clicks = 0;
function click() {
clicks += 1;
document.getElementById("clicks").innerHTML = clicks;
};
</script>
<button type="button" onClick="click()">Click me</button>
<p>Clicks: <a id="clicks">0</a></p>
</body></html>
Run Code Online (Sandbox Code Playgroud) 我是说这个:
https://github.com/ftlabs/fastclick
它仍然需要和重要吗?
我知道有些事情与某些浏览器的视口声明有关.但它似乎是旧事物,现在其他浏览器呢?
<meta name="viewport" content="width=device-width, initial-scale=1">
Run Code Online (Sandbox Code Playgroud) 代码:
$('input.media-checkbox').live('click', function(e){
e.preventDefault();
var that = $(this);
if (that.attr('checked') == 'checked'){
var m = that.attr('media');
var mid = 'verify_' + m;
that.parents('div.state-container').find('ul.' + mid).remove();
that.attr('checked', false);
} else {
var url = AJAX_URL;
$.ajax({
type: 'GET',
url: url,
dataType: 'html',
success: function(data){
that.parents('li').siblings('li.verification').children('div.media-verification').append(data).fadeIn(500);
that.attr('checked', 'checked');
}
});
}
return false;
});
Run Code Online (Sandbox Code Playgroud)
我在一个表单中ajaxing,然后在相关的复选框上触发click事件到另一个部分的ajax,如果有必要的话.很好地插入表单,并触发单击事件,检查需要检查的框并触发第二个ajax,因为checked复选框的属性最初是false.
如果我取消其中一个盒子,我的奶酪是什么?尽管如此e.preventDefault(),该checked属性设置为false在测试之前,因此该if语句始终执行该else语句.我也试过这个$.is(':checked'),所以我完全不知所措.
看来unchecked - > checked状态读取原始状态,但是选中 - >未选中则不会.有帮助吗?
看看我的jsfiddle 演示,如果e.which == 1那样当你左键单击h2它会
e.which == 2或e.which == 3然后它不会工作.2是鼠标中键,3是鼠标右键.我也发现了这个:
JQuery提供了一个e.which属性,分别为左,中,右三次返回1,2,3.所以你也可以使用if(e.which == 3){alert("right click"); }
此代码无效:
码:
$("h2").live('click', function(e) {
if( e.which == 2 ) {
e.preventDefault();
alert("middle button");
}
});
Run Code Online (Sandbox Code Playgroud) 这是我的html片段:
<div id="tag-cloud-widget">
<div class="content">
<a href="#" rel="1" class="cloud-element" data-tag-id="10" style="font-size: 12px; color: rgb(205, 236, 222); ">T1</a>
<a href="#" rel="1" class="cloud-element" data-tag-id="1" style="font-size: 12px; color: rgb(205, 236, 222); ">T2</a>
<a href="#" rel="1" class="cloud-element" data-tag-id="3" style="font-size: 12px; color: rgb(205, 236, 222); ">T3</a>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
我想设置一个点击处理程序来响应用户点击锚标签.这是测试代码:
$("#tag-cloud-widget .content a").click(function(e) {
alert('clicked');
return false;
});
Run Code Online (Sandbox Code Playgroud)
上面的点击处理程序不会被触发,也不会:
$("#tag-cloud-widget .content .cloud-element").click(function(e) {
alert('clicked');
return false;
});
Run Code Online (Sandbox Code Playgroud)
然而,
$("#tag-cloud-widget .content").click(function(e) { ... });
Run Code Online (Sandbox Code Playgroud)
和
$("#tag-cloud-widget").click(function(e) { ... });
Run Code Online (Sandbox Code Playgroud)
被解雇了!
我没看到什么?
我在我的按钮上使用了:active pseudoclass来改变点击时的填充和边框颜色.这在视觉上模仿按钮按下.看一个例子.
在FF工作.但是,在Chrome中,点击次数并不总是可以注册.具体来说,如果您单击按钮内的文本,然后拖动文本(但仍然在按钮内),则不会触发单击.如果单击填充,然后拖动到文本中也是如此.
我已经阅读了关于FF与Chrome中的按钮和填充的奇怪内容,但我无法弄清楚如何解决这个问题.
我现在用的是写一些测试摩卡测试框架和柴断言中图书馆我在Chrome浏览器一直在测试这些,他们工作得很好,但后来我尝试他们在无头的浏览器摩卡phantomjs和.点击()事件,我发送某些元素似乎不会被解雇,而其他人正在工作.
测试成功登录到网站,使用以下方式完成:
$("#login").click()
Run Code Online (Sandbox Code Playgroud)
"#login"是表单提交按钮,单击此方式可以正常工作.
接下来我想点击一个作为锚元素的菜单项.
$("#menuItemToClick").click();
Run Code Online (Sandbox Code Playgroud)
这是它停止在mocha-phantomjs工作的地方,即使这在chrome中运行良好.
所以很明显.click()函数已经定义并且可以工作但不适用于这个元素.
我已经筋疲力尽了google-foo.以下是我见过的其他一些提及和试过的事情:
var evObj = new CustomEvent('click');
evObj.initEvent('click', true, false);
document.getElementById('menuItemToClick').dispatchEvent(evObj);
Run Code Online (Sandbox Code Playgroud)
这会触发click事件并将浏览器带到正确的url,但它也会导致整个页面重新加载,在chrome和mocha-phantomjs中,从一开始就重新启动测试,将它们置于无限循环中......是否存在一种使用它的方法,而不会导致页面重新加载?
var elementPosition = $("#menuItemToClick").offset();
page.sendEvent('click', elementPosition.left + 1, elementPosition.top + 1);
Run Code Online (Sandbox Code Playgroud)
如果您传递元素的正确坐标,则应该发送本机单击事件.我试图让它工作但我似乎无法从正在运行的mocha测试中访问该页面.有没有办法从mocha-phantomjs测试中访问phantomjs页面变量?
任何帮助是极大的赞赏!