我有一个有趣的情况 - 我有一个表行,当前,当我点击"展开"按钮时,它显示它是隐藏的对应物.包含展开按钮的原始(未隐藏)行也包含某个单元格中的某些内容,单击该单元格后,该内容将变为可编辑状态.我想摆脱展开按钮,并通过双击行本身的任何位置来启用行的扩展,包括单击它时变为可编辑的字段.你可以在这里闻到麻烦.
当我双击一行时,在dblclick发生之前首先触发两个单击事件.这意味着如果我双击该字段,它将变为可编辑的字段,并且该行将展开.我想阻止这个.我希望双击以防止单击的触发,并且单击以执行常规操作.
使用event.stopPropagation()显然不会起作用,因为它们是两个不同的事件.
有任何想法吗?
编辑(一些半伪代码):
原始版本:
<table>
<tbody>
<tr>
<td><a href="javascript:$('#row_to_expand').toggle();" title="Expand the hidden row">Expand Row</a></td>
<td>Some kind of random data</td>
<td><?= $editable_cell_which_turns_into_an_input_field_on_single_click[0]->value("First editable value") ?></td>
<td><?= $editable_cell_which_turns_into_an_input_field_on_single_click[1]->value("Second editable value") ?></td>
<td><?= $editable_cell_which_turns_into_an_input_field_on_single_click[2]->value("Third editable value") ?></td>
<!-- ... -->
<td><?= $editable_cell_which_turns_into_an_input_field_on_single_click[n]->value("Nth editable value") ?></td>
</tr>
<tr style="display: none" id="row_to_expand">
<td colspan="n">Some hidden data</td>
</tr>
</tbody>
</table>
Run Code Online (Sandbox Code Playgroud)
期望的版本:
<table>
<tbody>
<tr ondblclick="$('#row_to_expand').toggle()">
<td>Some kind of random data</td>
<td><?= $editable_cell_which_turns_into_an_input_field_on_single_click[0]->value("First editable value") ?></td>
<td><?= $editable_cell_which_turns_into_an_input_field_on_single_click[1]->value("Second editable value") ?></td>
<td><?= $editable_cell_which_turns_into_an_input_field_on_single_click[2]->value("Third …Run Code Online (Sandbox Code Playgroud) 我正在寻找使用AngularJS的单击和双击事件处理,因为即使为我们的元素设置了ng-dblclick指令,AngularJS也总是仅触发ng-click事件.
以下是寻求解决方案的人的一些工作代码:
JS:
function MyController($scope) {
var waitingForSecondClick = false;
$scope.singleClickAction = function() {
executingDoubleClick = false;
if (waitingForSecondClick) {
waitingForSecondClick = false;
executingDoubleClick = true;
return $scope.doubleClickAction();
}
waitingForSecondClick = true;
setTimeout(function() {
waitingForSecondClick = false;
return singleClickOnlyAction();
}, 250); // delay
/*
* Code executed with single AND double-click goes here.
* ...
*/
var singleClickOnlyAction = function() {
if (executingDoubleClick) return;
/*
* Code executed ONLY with single-click goes here.
* ...
*/
}
}
$scope.doubleClickAction = …Run Code Online (Sandbox Code Playgroud) 我希望能够将单击和双击事件绑定到一个文本范围.我知道我可以使用
data-bind ="event: { dblclick: doSomething }
Run Code Online (Sandbox Code Playgroud)
双击,但我还需要能够单击执行不同的功能.有什么建议?
嗨我想在右键单击上有一个dblclick(),因为谷歌地图必须放大和缩小.有没有办法做到这一点.我已经编写了dblclick但现在它只使用左键单击.有关如何执行此操作的任何指示.这是我的代码
$("div#demo1").dblclick(function(e) {
//alert(e.getElementById());
if( (!$.browser.msie && e.button == 0) || ($.browser.msie && e.button == 1) ) {
alert("Left Mouse Button was clicked on demo1 div!");
$("div.window").animate({
'height':'+=20', 'width':'+=20'
},0,function(){
jsPlumb.repaintEverything();
jsPlumb.repaintEverything();
});
// Left mouse button was clicked (all browsers)
}
else if( (!$.browser.msie && e.button == 2) || ($.browser.msie && e.button == 3) ) {
alert("right click double");
}
});
Run Code Online (Sandbox Code Playgroud) 我在http://abeautifulsite.net/notebook/58上使用jQueryFileTree,我想区分dblclick 和click事件,因为点击总是由dblclick触发.
谷歌搜索引发了一种技术,其中点击由计时器处理,当dblclick不取消它时启动.
有没有什么方法可以用jQuery和jQuery示例以优雅的方式使用?
我有一个p带有一些文字的标签,而我正试图制作它,contenteditable但只是双击.当我点击它时,如何防止浏览器将光标放在p上,只有在我双击时才这样做?JQuery的:
p.dblclick(function(e){
p.css("cursor", "text");
})
.focusout(function(){
p.css("cursor", "default");
})
.click(function(e){
console.log('focus p');
e.stopPropagation();
$("body").focus(); // not stopping Chrome from placing cursor
});
Run Code Online (Sandbox Code Playgroud)
我可以在contenteditable默认情况下使其成为假,然后将其设为true dbleclick然后执行,p.focus()但这意味着我无法将光标放在我单击的位置.另一方面,我可以在第一次点击后让它满足,然后等待1.5s for dobuleclick,如果没有发生取消它,但如果它发生了,那么内容将是可编辑的,第二次点击将触发将光标放在正确的位置.然而,它不是那么平滑,并且使这些内容可以在这些1秒半内编辑.
回答:如果有人感兴趣,我继续实施计时器方法,因为我认为没有其他办法...这里是代码
var DELAY = 700, clicks = 0, timer = null;
p.focusout(function(){
p.css("cursor", "default");
p.prop("contenteditable", false);
})
.click(function(e){
clicks++;
p.prop("contenteditable", true);
if(clicks == 1){
timer = setTimeout(function() {
p.prop("contenteditable", false);
//alert("Single Click"); //perform single-click action
clicks = 0; //after action performed, reset counter
}, …Run Code Online (Sandbox Code Playgroud) 我在 HTML 中输入了带有数字文本的字段,其中有一个点,即“1.00.1”。如果我在 IE 或 firefox 中双击此字段,浏览器仅选择文本的一部分(点之间),但在 Chrome 中双击选择此字段中的整个文本。在 Chrome 中更改此行为的最佳方法是什么?如果我在输入字段中只有文本(即“test.test”),则在 Chrome 中双击并选择与 IE 和 Firefox 一样。

我必须处理“click”和“dblclick”两个事件,但 click 事件始终在 dblclick 事件之前触发,并且不让 dblclick 事件执行。如何使事件正确执行“click”和“dblclick”
google.maps.event.addListener(map, 'dblclick', function(event) {
polygon(map, event.latLng)
});
google.maps.event.addListener(map, 'click', function(event) {
click_events(map, event.latLng)
});
Run Code Online (Sandbox Code Playgroud) HTML:
<a href="#" class="change">Old Text</a>
<a href="#" class="change">Old Text</a>
Run Code Online (Sandbox Code Playgroud)
我想用 jQuery 更改“文本”,延迟两秒钟并将其设置回原始状态。我试过超时和延迟失败。该页面有多个具有相同文本“添加到购物车”的项目,然后切换到“已添加”,然后再次返回。
jQuery:
$('.change').html('first').delay(2000).html('second')
Run Code Online (Sandbox Code Playgroud)
这失败了。它忽略第一个,直接跳到第二个
_x = $(this);
$(_x).html('New Text');
_t = setTimeout(function(){
$(_x).html('Old Text');
},2000);
Run Code Online (Sandbox Code Playgroud)
如果用户在 2 秒重置之前单击并且没有触发另一个,则此方法有效。如果有人点击#1,然后在#1 重置文本之前点击#2,它适用于#2,但#1 上的文本保留在新文本中。
我认为因为它在一个函数内,所以超时将使用它自己的 _t 实例为每个对象实例化,但显然不是。
我不确定这是否重要,但有时会动态加载元素,并且相应地设置了单击绑定
$(element).on('click','.change',function(_e) { ...
Run Code Online (Sandbox Code Playgroud)
我该如何处理?先感谢您。
javascript ×6
jquery ×6
angularjs ×1
click ×1
delay ×1
dom-events ×1
double-click ×1
events ×1
function ×1
html ×1
knockout.js ×1
ondblclick ×1
propagation ×1
timeout ×1
timer ×1