我有一个表行,在表格行的任何地方都有鼠标点击附加的Javascript操作:
<tr onmousedown="someAction(this)">
<td>cell 1</td>
<td>cell 2</td>
<td><a href="page2.html">cell 3</a></td>
</tr>
Run Code Online (Sandbox Code Playgroud)
如果用户点击该行中的任何位置,我希望遵循Javascript操作someAction(this).但是,如果用户单击指向page2的链接,那么我希望忽略该操作并遵循链接.
不幸的是,首先会观察到该动作,这恰好会使链接文本的位置移动到足以使点击被删除.换句话说,在这种情况下,用户实际上无法点击链接并转到第2页.
如何禁用链接点击的mousedown操作?
谢谢!
更新: 基于答案,我最终在HTML的末尾包含了以下JavaScript,它按照建议注册了一个停止传播的事件处理程序,如下所示:
...
<script type="text/javascript" language="javascript">
//<![CDATA[
function stopEvent(ev) {
ev.stopPropagation();
}
var links = document.getElementsByTagName('a');
for (var i = 0; i < links.length; i++) {
links[i].addEventListener("onmousedown", stopEvent, false);
}
//]]>
</html>
Run Code Online (Sandbox Code Playgroud)
这可能很容易被包含在文档的onload事件中,但CDATA部分已经因其他原因而被要求,所以我在这里添加了我需要的内容.
感谢所有的帮助和好建议!:)
我有一组同名的复选框,我需要的是当我点击其中任何一个时,其他复选框必须被禁用.我应该如何应用javascript?
<input type="checkbox" name="finallevelusers[]" value="1"/>
<input type="checkbox" name="finallevelusers[]" value="1"/>
<input type="checkbox" name="finallevelusers[]" value="1"/>
<input type="checkbox" name="finallevelusers[]" value="1"/>
Run Code Online (Sandbox Code Playgroud)
请帮忙...
我在Firefox中访问"事件"时遇到问题.以下代码在Chrome中运行良好,但在Firefox中我收到"事件未定义"错误.
<tr onclick="rowSelected('thisRowType')">
... row content ...
</tr>
<script type="text/javascript">
function rowSelected(type) {
var eventRow = event.currentTarget; // here I get the error
}
</script>
Run Code Online (Sandbox Code Playgroud)
据我所知,Firefox没有找到任何名为event的变量,但是我还没有找到除了'event'以外的任何东西也应该在Firefox中定义.
那么我怎样才能在Firefox中访问当前事件,或者重新设计应该如何?请注意,我有不同的行为'type'提供不同的值.
所以我正在尝试使用javascript进行自定义标签系统.但是,为了重用我想用OOP风格编写的代码.这就是我到目前为止:
function Tabs()
{
this.tabArray = new Array(arguments.length);
this.tabArrayC = new Array(arguments.length);
for(i=0;i<arguments.length;i++)
{
this.tabArray[i] = arguments[i];
this.tabArrayC[i] = arguments[i]+'_content';
}
this.setClickable = setClickable;
function setClickable()
{
for(i=0;i<this.tabArray.length;i++)
{
document.getElementById(this.tabArray[i]).onclick = function()
{
alert(this.tabArray[i]);
}
}
}
}
function init()
{
tab = new Tabs('tab1','tab2','tab3','tab4');
tab.setClickable();
}
window.onload = init();
Run Code Online (Sandbox Code Playgroud)
现在这是交易.我想将onclick事件处理程序分配给在Tabs'类'构造函数中传递的每个选项卡.所以稍后在代码中我写了类似的东西:
<div id="tab1">Tab1</div>
<div id="tab2">Tab2</div>
<div id="tab3">Tab3</div>
<div id="tab4">Tab4</div>
Run Code Online (Sandbox Code Playgroud)
之前设置的代码:
document.getElementById(this.tabArray[i]).onclick = function()
{
alert(this.tabArray[i]);
}
Run Code Online (Sandbox Code Playgroud)
......将被执行.我希望我解释得那么好.有任何想法吗?
我有一个看起来像下面的结构,我正在尝试获取id foo.如果我们从中冒泡,它是唯一 DIV的id onclick func(),这意味着不会有其他内部包含id的DIVfoo.但是,里面可能有其他标签foo包含id(例如bye, hello).
没有使用框架.
<div id="bar"></div>
<div id="foo">
<p><p>
<div class="bye">
<input id="bye" type="text" value="test" />
<input id="hello" type="text" value="test" />
<table>
<tr><td onclick="func(event)">1</td></tr>
<tr><td onclick="func(event)">2</td></tr>
</table>
</div>
</div>
Run Code Online (Sandbox Code Playgroud) 当我尝试使用如下代码在JQuery中创建一个元素时:
$('#grid').append('<div id="gridElement'+counter+'" class="ui-block-'+rowLetter(counter)+'"></div>');
$('#gridElement'+counter).append('<div id="gridContent'+counter+'" data-inline="true"></div>');
$('#gridContent'+counter).append('<a id="button'+counter+'" href="#" data-role="button"></a>');
$('#button'+counter).html('someButtonText');
Run Code Online (Sandbox Code Playgroud)
正确添加元素,但不执行JQuery Mobile样式.这种方式很有意义,我知道库一加载就会对DOM做一些事情,但我无法找到一种方法来实现命令.显然我需要指示JQuery Mobile库重建页面,但对于我的生活,我一般都找不到任何可以做到的事情.我已经设法找到几个关于这是选择框和列表的问题的帖子,但一般,网格或按钮没有任何内容.到目前为止这是否可能?它仍处于alpha状态,所以可能不是.
无法找到解决我认为是一个简单问题的方法.
我var a = evt.keyCode;用来确定点击了哪个键.
问题是我得到的值是被点击的键的ASCII码而不是被点击的真实字符.
例如,如果用户正在使用法语键盘,则单击该7键é,因此不是获取ASCII代码é,而是获得55,这是ASCII代码7.
如果没有按下任何键,则触发AJAX调用的计时器.如果按下某个键,则中止最后一个计时器并添加一个新计时器.这就是我想做但却未能成功的事情.这是我的代码:
var t;
input.onkeyup = function(){
$('.confirmText').html('Checking...');
var timeStampObj = new Date()
var timeStamp = timeStampObj.getTime();
var oldTimeStamp = $(this).attr('timeStamp');//I store a timeStamp in the element
if(timeStamp < 500 + oldTimeStamp){
$(this).attr('timeStamp', timeStamp);
clearTimeout(t);
}
t = setTimeout(function(){
$.ajax({
url: 'serverScripts/settings/checkEmailAvailability.php',
data: 'email='+email,
success: function(text){
if(text == 'available'){
$('.confirmText').html('Available!');
}else{
$('.confirmText').html('Occupied!');
}
}
});
}, 500);//Half a second
$(this).attr('timeStamp', timeStamp);
}
Run Code Online (Sandbox Code Playgroud) 我目前正在构建一个需要通过其内容识别元素的应用程序.通常我会使用元素的ID来识别它,但在这种情况下,由于内容是用户生成的,因此不可能.
我有一个PHP脚本输出一些内容,其中一部分是用户输入的.例如:
<!-- elementid1 -->
This is user generated text. Lorem ipsum...
Run Code Online (Sandbox Code Playgroud)
我需要能够识别此元素并在点击时触发事件.一旦点击发生,我应该能够轻松地从内容中解析ID(elementid1).
但是,这些元素并不总是DIV.有时它们是H1到H6等.我将如何检测这些事件
要么
或者,我可以遍历所有元素(我不知道该怎么做),使用ID设置自定义属性,然后为属性等于某事的元素创建JQuery事件.如果有人知道如何遍历每个DOM元素(最好只有孩子,因为父母也会有子女的内容......),那么这也可行.
一张纸条:
通常我会使用contains()选择器,但由于这个ID是注释而不是文本,所以它似乎不起作用.
基本上我正在尝试实现一个登录,例如新推特的登录.当您单击登录时,会弹出包含字段的div.现在,当我点击div之外的任何地方(div失去焦点)时,div应该消失.
我已经尝试过如何模糊div元素中提到的技术?
代码如下
$("body").click(function(evt) {
if (evt.target.id !== 'loginDialog') {
$("#loginDialog").hide();
}
});
Run Code Online (Sandbox Code Playgroud)
麻烦就是target.id不会等于loginDialog,即使我点击某个地方有一个loginDialog在一个子div中说.
所以上面是一个很好的方向,但解决方案是不完整的.
实现这一目标的最佳方法是什么?