mouseup 和 mousedown 事件之间的冲突?
Conflict between mouseup and mousedown events?
我制作了一个 table,里面有不同的单元格(input
个元素):
<?php
echo '<table>';
echo '<tr>';
echo '<td><input name="test00" value="0"></td>';
echo '<td><input name="test01" value="1"></td>';
echo '</tr>';
echo '<tr>';
echo '<td><input name="test10" value="2"></td>';
echo '<td><input name="test11" value="3"></td>';
echo '</tr>';
?>
并具有以下 jQuery 代码:
$('input[name^="test"]').mousedown(function(event)
{
//event.preventDefault();
var field=$(this);
field.css({background : "#BFE7F5"});
});
$('input[name^="test"]').on( "mouseup", function()
{
//var id-cellule;
//var id-colonne;
var field=$(this);
field.css({background : "#AAAAAA"});
});
问题:
当我在单元格外释放鼠标(mouseup
事件)时,此函数仍然在发生 mousedown
事件的单元格上执行。
我想允许用户 select 多个单元格,所以当 mousedown
出现在一个单元格上时,这将是第一个 selected 单元格。然后在 mouseup
上,鼠标指示的单元格应该是最后一个 selected 的单元格。
我把上面的例子做了一个示例table,以便于理解。
我尝试使用 preventDefault()
,但是 none 的输入不再是 editable。
$('input[name^="test"]').mousedown(function(event) // Pour tous les input qui changeront
{
//event.preventDefault();
var field=$(this);
field.css({background : "#BFE7F5"});
});
$('input[name^="test"]').on( "mouseup", function() // Pour tous les input qui changeront
{
//var id-cellule;
//var id-colonne;
var field=$(this);
field.css({background : "#AAAAAA"});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
<tr>
<td><input name="test00" value="0"></td>
<td><input name="test01" value="1"></td>
</tr>
<tr>
<td><input name="test10" value="2"></td>
<td><input name="test11" value="3"></td>
</tr>
尝试 jquery 的 mouseout 事件。
只需将 mouseup 替换为 mouseout。
[代码][已编辑}
$('input').mousedownr(function(event) // Pour tous les input qui changeront
{
var field_nm=$(this).attr("name");
//event.preventDefault();
var field=$(this);
field.css({background : "#BFE7F5"});
});
$('input').on( "mouseup", function() // Pour tous les input qui changeront
{
var field_nm=$(this).attr("name");
//var id-cellule;
//var id-colonne;
var field=$(this);
field.css({background : "#AAAAAA"
});
您需要将 mouseup
侦听器附加到 document
以便您可以检测输入的输出 mouseup
然后将 start_input
初始化为白色 :
var start_input;
$('input[name^="test"]').mousedown(function(event){
var field=$(this);
field.css({background : "#BFE7F5"});
start_input=field;
});
$(document).on( "mouseup", function(e){
var field=$(e.target);
if( e.target.tagName=="INPUT" ){
field.css({background : "#AAAAAA"});
}else{
start_input.css({background : "#FFFFFF"});
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
<tr>
<td><input name="test00" value="0"></td>
<td><input name="test01" value="1"></td>
</tr>
<tr>
<td><input name="test10" value="2"></td>
<td><input name="test11" value="3"></td>
</tr>
mouseup
事件的目标是获得焦点的 input
元素,即使您的鼠标位置在另一个元素上也是如此。即使使用事件委托,或通过请求 $(':hover')
,您仍将获得具有焦点的 input
元素。
相反,从您悬停的元素的鼠标位置计算,如果它是 input
元素,则执行 CSS 修改:
$('input[name^="test"]').mousedown(function(event) {
$(this).css({background : "#BFE7F5"});
});
$('input[name^="test"]').on( "mouseup", function(e) {
$hoverElem = $(document.elementFromPoint(e.clientX, e.clientY))
.filter('input[name^="test"]');
$hoverElem.css({background : "#AAAAAA"})
.focus();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
<tr>
<td><input name="test00" value="0"></td>
<td><input name="test01" value="1"></td>
</tr>
<tr>
<td><input name="test10" value="2"></td>
<td><input name="test11" value="3"></td>
</tr>
</table>
所以对于 mouseout 来说,它不是一个好东西。
对于第二个提议,
我添加了以下内容:
var name= $(this).attr("name");
console.log(姓名);
但名称是我按下鼠标按钮(启动 mousedown 的地方)的单元格的名称。
我制作了一个 table,里面有不同的单元格(input
个元素):
<?php
echo '<table>';
echo '<tr>';
echo '<td><input name="test00" value="0"></td>';
echo '<td><input name="test01" value="1"></td>';
echo '</tr>';
echo '<tr>';
echo '<td><input name="test10" value="2"></td>';
echo '<td><input name="test11" value="3"></td>';
echo '</tr>';
?>
并具有以下 jQuery 代码:
$('input[name^="test"]').mousedown(function(event)
{
//event.preventDefault();
var field=$(this);
field.css({background : "#BFE7F5"});
});
$('input[name^="test"]').on( "mouseup", function()
{
//var id-cellule;
//var id-colonne;
var field=$(this);
field.css({background : "#AAAAAA"});
});
问题:
当我在单元格外释放鼠标(mouseup
事件)时,此函数仍然在发生 mousedown
事件的单元格上执行。
我想允许用户 select 多个单元格,所以当 mousedown
出现在一个单元格上时,这将是第一个 selected 单元格。然后在 mouseup
上,鼠标指示的单元格应该是最后一个 selected 的单元格。
我把上面的例子做了一个示例table,以便于理解。
我尝试使用 preventDefault()
,但是 none 的输入不再是 editable。
$('input[name^="test"]').mousedown(function(event) // Pour tous les input qui changeront
{
//event.preventDefault();
var field=$(this);
field.css({background : "#BFE7F5"});
});
$('input[name^="test"]').on( "mouseup", function() // Pour tous les input qui changeront
{
//var id-cellule;
//var id-colonne;
var field=$(this);
field.css({background : "#AAAAAA"});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
<tr>
<td><input name="test00" value="0"></td>
<td><input name="test01" value="1"></td>
</tr>
<tr>
<td><input name="test10" value="2"></td>
<td><input name="test11" value="3"></td>
</tr>
尝试 jquery 的 mouseout 事件。 只需将 mouseup 替换为 mouseout。
[代码][已编辑}
$('input').mousedownr(function(event) // Pour tous les input qui changeront
{
var field_nm=$(this).attr("name");
//event.preventDefault();
var field=$(this);
field.css({background : "#BFE7F5"});
});
$('input').on( "mouseup", function() // Pour tous les input qui changeront
{
var field_nm=$(this).attr("name");
//var id-cellule;
//var id-colonne;
var field=$(this);
field.css({background : "#AAAAAA"
});
您需要将 mouseup
侦听器附加到 document
以便您可以检测输入的输出 mouseup
然后将 start_input
初始化为白色 :
var start_input;
$('input[name^="test"]').mousedown(function(event){
var field=$(this);
field.css({background : "#BFE7F5"});
start_input=field;
});
$(document).on( "mouseup", function(e){
var field=$(e.target);
if( e.target.tagName=="INPUT" ){
field.css({background : "#AAAAAA"});
}else{
start_input.css({background : "#FFFFFF"});
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
<tr>
<td><input name="test00" value="0"></td>
<td><input name="test01" value="1"></td>
</tr>
<tr>
<td><input name="test10" value="2"></td>
<td><input name="test11" value="3"></td>
</tr>
mouseup
事件的目标是获得焦点的 input
元素,即使您的鼠标位置在另一个元素上也是如此。即使使用事件委托,或通过请求 $(':hover')
,您仍将获得具有焦点的 input
元素。
相反,从您悬停的元素的鼠标位置计算,如果它是 input
元素,则执行 CSS 修改:
$('input[name^="test"]').mousedown(function(event) {
$(this).css({background : "#BFE7F5"});
});
$('input[name^="test"]').on( "mouseup", function(e) {
$hoverElem = $(document.elementFromPoint(e.clientX, e.clientY))
.filter('input[name^="test"]');
$hoverElem.css({background : "#AAAAAA"})
.focus();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
<tr>
<td><input name="test00" value="0"></td>
<td><input name="test01" value="1"></td>
</tr>
<tr>
<td><input name="test10" value="2"></td>
<td><input name="test11" value="3"></td>
</tr>
</table>
所以对于 mouseout 来说,它不是一个好东西。 对于第二个提议, 我添加了以下内容:
var name= $(this).attr("name"); console.log(姓名);
但名称是我按下鼠标按钮(启动 mousedown 的地方)的单元格的名称。