【问题标题】:When click change to text-area, When outside click change back单击更改为文本区域时,单击外部时更改回
【发布时间】:2012-12-22 01:32:10
【问题描述】:

我正在尝试制作一个类似于 PHPadmin 的函数,它们在显示表格时使用什么,当单击 div 字段时,更改为文本区域,当单击 div 外部时,将其更改回 div 字段。下面的代码是错误的,当我点击外部时,我无法更改回 div 文件。请帮助我改进代码。

JS:

$('#editor #gird_edit').bind({
  click: function() {
            $(this).html('<textarea id="gird_edit">'+$(this).text()+'</textarea>');
  },
  blur: function() {
            $(this).html('<div id="gird_edit">'+$(this).text()+'</div>');
  }
});

HTML:

<div id='editor'>
<div id='gird_edit'>hallo world</div>
<div id='gird_edit'>hallo world 2</div>
<div id='gird_edit'>hallo world 3</div>
</div>

我只有 8 个声望,我不能投票给你。但是,我真诚地感谢您的帮助!

【问题讨论】:

    标签: javascript jquery forms phpmyadmin


    【解决方案1】:

    检查this我刚刚制作的jsbin,如果您需要其他任何东西,我很乐意提供帮助。

    【讨论】:

    • 非常感谢!真诚的,
    • 好的,没问题,我们是来帮忙的,节日快乐!
    • ups,是的,对此很抱歉,只需抛出这一行 if(pressed.is("textarea") ) return;在按下 var = $(e.target); 之后link有更新版本
    • 非常感谢。这是否可以仅通过一个 id 来确定事件?就像我有相同的 div id='gird_edit'
    • 可能有多个标签具有相同的 id,但这被认为是一种不好的做法,应该使用相同的 CLASS 处理多个元素,因此每个元素的 id 都是唯一的。 @Teifi 给出的答案确实是一流的,它对多个标签使用单个 id。干杯。
    【解决方案2】:

    see jsfiddle

    updated jsfiddle

    $(this).html(textarea) 完成时,div 已经模糊了。所以 onBlur 不起作用

    $('#editor #gird_edit').bind({
        click: function() {
            var tex = $(this).text();
            var textarea = $('<textarea id="gird_edit">'+tex+'</textarea>');
            $(this).html(textarea);
            textarea.focus();
            textarea.blur(function(){
                var currentText = textarea.val();
                if(currentText == tex)//not change
                    textarea.parent().text(tex);
                else //changed
                    alert(currentText);
            });
        }
    });
    

    编辑 3:

    else{
        textarea.parent().text(currentText);
        //something else
    }
    

    查找更多jquery API

    【讨论】:

    • 更改文本区域内部的值后,单击外部。归档将变回原始值。我应该如何重新读取值??
    • 非常感谢您,这很完美!一个矿工的问题,无论你点击哪里,编辑器光标都会自动回到开头,这可以解决吗?
    【解决方案3】:

    当你第一次点击#gird_edit它是一个div,所以this是一个div,你可以替换它的内容来改变东西。但是,当您模糊 #gird_edit 时,#gird_edit 是一个 textarea,因此如果您更改其内容,您并没有真正改变您想要更改的内容(您只是更改了 textarea 的内部)。

    您要更改的是文本区域周围的 div,即。该文本区域的“父级”。换句话说,试试:

    blur: function() {
            $(this).parent().html('<div id="gird_edit">'+$(this).text()+'</div>');
    }
    

    【讨论】:

    • 问题是,模糊功能不会响应点击功能生成的文本区域。
    猜你喜欢
    • 1970-01-01
    • 2012-07-23
    • 2012-12-14
    • 1970-01-01
    • 2015-06-27
    • 1970-01-01
    • 2019-02-28
    • 2018-06-05
    相关资源
    最近更新 更多