【问题标题】:Blur function instead of mouseup function not working as desired模糊功能而不是 mouseup 功能无法按预期工作
【发布时间】:2012-06-17 23:24:03
【问题描述】:

我有Demo Table,我可以单击单元格(td 标记),我可以更改它的值。直接 php 数据库。 为此,我需要包含两个 tags.1 - span。 2 - 输入。 像下面这样。

<td class='Name'>
 <span id="spanName1" class="text" style="display: inline;"> Somevalue  </span>
 <input type="text" value="Somevalue" class="edittd" id="inputName1" style="display: none; ">   
</td>

为了控制我在 jquery 中使用的单元格内的数据。mouseup 函数。 mouseup 有效,但也有麻烦。 我需要用模糊功能替换它,但是当我尝试用模糊替换 mouseup 该程序不起作用,因为当我单击单元格时,我能够输入输入标签并且我可以更改值,但我没有成功通过单击表格旁边的离开标签/字段,这让我可以更新数据库 你可以看到Demo with blur Here。 你建议我怎么做?

$(".edittd").mouseup(function() {
        return false;
    });
  //*************
    $(document).mouseup(function() {
        $('#span' + COLUME + ROW).show();
        $('#input'+ COLUME + ROW ).hide();
        VAL = $("#input" + COLUME + ROW).val();
        $("#span" + COLUME + ROW).html(VAL);

        if(STATUS != VAL){
            //******ajax code
                 //dataString = $.trim(this.value);
                      $.ajax({
                        type: "POST",
                         dataType: 'html',
                         url: "./public/php/ajax.php",
                         data: 'COLUME='+COLUME+'&ROW='+ROW+'&VAL='+VAL, //{"dataString": dataString}
                             cache: false,
                             success: function(data)
                             {
                                $("#statuS").html(data);
                                }
                             });
                      //******end ajax
                      $('#statuS').removeClass('statuSnoChange')
                        .addClass('statuSChange');
                         $('#statuS').html('THERE IS CHANGE');
                         $('#tables').load('TableEdit2.php');
                 }
                 else
                 {
                 //alert(DATASTRING+'status not true');
                 }
        });//End mouseup function

我改成:

$(document).ready(function()
{
    var COLUMES,COLUME,VALUE,VAL,ROWS,ROW,STATUS,DATASTRING;
    $('td').click(function() {
        COLUME = $(this).attr('class');   
      });
//****************
    $('tr').click(function() {
        ROW = $(this).attr('id');
        $('#display_Colume_Raw').html(COLUME+ROW);
        $('#span' + COLUME + ROW).hide();
        $('#input'+ COLUME + ROW ).show();
      STATUS = $("#input" + COLUME + ROW).val();
    });
  //******************** 
    $(document).blur(function() {
        $('#span' + COLUME + ROW).show();
        $('#input'+ COLUME + ROW ).hide();
        VAL = $("#input" + COLUME + ROW).val();
        $("#span" + COLUME + ROW).html(VAL);

        if(STATUS != VAL){
            //******ajax code
                 //dataString = $.trim(this.value);
                      $.ajax({
                        type: "POST",
                         dataType: 'html',
                         url: "./public/php/ajax.php",
                         data: 'COLUME='+COLUME+'&ROW='+ROW+'&VAL='+VAL, //{"dataString": dataString}
                             cache: false,
                             success: function(data)
                             {
                                $("#statuS").html(data);
                                }
                             });
                      //******end ajax
                      $('#statuS').removeClass('statuSnoChange')
                        .addClass('statuSChange');
                         $('#statuS').html('THERE IS CHANGE');
                         $('#tables').load('TableEdit2.php');
                 }
                 else
                 {
                 //alert(DATASTRING+'status not true');
                 }
        });//End mouseup function
        $('#save').click (function(){
            var input1,input2,input3,input4="";
                input1 = $('#input1').attr('value');
                input2 = $('#input2').attr('value');
                input3 = $('#input3').attr('value');
                input4 = $('#input4').attr('value');
                $.ajax({
                    type: "POST",
                    url: "./public/php/ajax.php",
                    data: "input1="+ input1 +"&input2="+ input2 +"&input3="+ input3 +"&input4="+ input4,
                    success: function(data){
                        $("#statuS").html(data);
                        $('#tbl').hide(function(){$('div.success').fadeIn();});
                        $('#tables').load('TableEdit2.php');
                    }
                });
        });
});

【问题讨论】:

  • 这真的是一个问题还是你的成就?

标签: jquery


【解决方案1】:

当用户在文档周围单击时,不会触发 blur 事件。

要查看事件何时触发,您可以使用 JavaScript 控制台附加一个日志记录功能。 将这些粘贴到您的控制台中:

$(document).mouseup(function(){console.log('document.mouseup()')});
$(document).blur(function(){console.log('document.blur()')});

然后四处点击并查看模糊不会触发,除非您整个文档失去焦点(而不是所有浏览器)。

mouseup 造成了什么样的麻烦?

【讨论】:

  • 嗨,我怎么能找到mouseup的解决方案 无用请看这里Demo
  • 您的问题是 document.click() 在您单击 时也会运行(至少在 Firefox 中)。将 mouseup 更改为 click() 并在 tr click 函数的末尾添加“e.stopPropagation()”(这将阻止事件冒泡到文档点击处理程序,这将撤消 tr.click 刚刚所做的事情)。您还可以将 .focus() 添加到 input1.show() 中,因为目前您需要单击两次才能编辑该字段。请参阅:link
猜你喜欢
  • 2020-02-26
  • 1970-01-01
  • 2016-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-13
  • 1970-01-01
相关资源
最近更新 更多