【问题标题】:Make Edit button function work properly使编辑按钮功能正常工作
【发布时间】:2013-01-16 08:33:30
【问题描述】:

我有以下代码:

function appendText(){

        var text = document.getElementById('usertext').value;

            if ( document.getElementById('usertext').value ){

                var div = document.createElement('div');
                div.className = 'divex';

                var li = document.createElement('li');
                li.setAttribute('id', 'list');  
                div.appendChild(li);

                var texty = document.createTextNode(text);
                var bigdiv = document.getElementById('addedText');

                var editbutton = document.createElement('BUTTON');
                editbutton.setAttribute('id', 'button_click');
                var buttontext = document.createTextNode('Edit');
                editbutton.appendChild(buttontext); 

                bigdiv.appendChild(li).appendChild(texty);
                bigdiv.appendChild(li).appendChild(editbutton);

                editbutton.onclick = makeAreaEditable;
                var makeAreaEditable = function(){

                            var textareaEdit = document.createElement('textarea');
                            textareaEdit.onclick = myFunction;
                            textareaEdit.customProperty = li.value;

                            function myFunction(e){
                                var objLi = e.currentTarget;
                                objLi.value = objLi.customProperty;
                                document.getElementByID("button_click").value = "ok";
                            };
                        };

                document.getElementById('usertext').value = "";   
        }        
};

还有下面的html:

             <textarea id="usertext"></textarea>
    <button onClick="appendText()">Add text </button>

    <div id="addedText" style="float:left">
    </div>

我希望我的 makeAreaEditable 函数像这样工作:当我单击编辑按钮时,一个文本区域将出现,其中包含 li.value。所以我可以编辑文本(按钮也会从编辑变为确定)。我想要这个在纯 javascript 中

【问题讨论】:

  • 你也可以给我们jsfiddle.net链接,这将是最好的开始方式
  • 点击添加文本按钮后会出现 li 会触发 appendText 功能。带有编辑按钮的 li 将出现在 textarea 下方
  • jsfiddle.net/vUpSz 这是链接..所以当我按下编辑时,我希望值出现在与编辑相同的行上的文本区域中.. 并且编辑可以转换,所以我可以然后创建另一个函数来保存每一行的编辑

标签: javascript


【解决方案1】:

如果添加 2 个元素(单击 addtext 2 次)或更多,它们都具有相同的 id (button_clic)。所以不要想代码

document.getElementByID("button_click").value

会起作用的。

第二,您正在创建一个 div 元素 var div 并将 li 元素添加到该 div。但是之后你什么都不做,因为你将 li 直接分配给了 bigdiv

关于我最后的 cmets,您必须创建自己的函数,然后将它们添加到元素中。现在你反过来做,你将一个函数分配给一个元素,然后定义这个函数。而且您必须将 textareaEdit 添加到元素。否则它永远不会显示在页面上。

你的代码应该是这样的

function appendText(){

        var text = document.getElementById('usertext').value;

            if ( document.getElementById('usertext').value ){

                var div = document.createElement('div');
                div.className = 'divex';

                var li = document.createElement('li');
                li.setAttribute('id', 'list');
                div.appendChild(li);

                var texty = document.createTextNode(text);
                var bigdiv = document.getElementById('addedText');

                var editbutton = document.createElement('BUTTON');
                editbutton.setAttribute('id', 'button_click');
                var buttontext = document.createTextNode('Edit');
                editbutton.appendChild(buttontext);

                var makeAreaEditable = function(){
                            function myFunction(e){
                                var objLi = e.currentTarget;
                                objLi.value = objLi.customProperty;
                                document.getElementByID("button_click").value = "ok";
                            };
                            var textareaEdit = document.createElement('textarea');
                            textareaEdit.customProperty = li.value;
                            textareaEdit.onclick = myFunction;
                            bigdiv.appendChild(li).appendChild(textareaEdit);
                        };
                editbutton.onclick = makeAreaEditable;
                bigdiv.appendChild(li).appendChild(texty);
                bigdiv.appendChild(li).appendChild(editbutton);
                document.getElementById('usertext').value = "";
        }
};

【讨论】:

  • 你必须创建你的函数,然后将它们添加到元素中。现在你反过来做,你将一个函数分配给一个元素,然后定义这个函数。而且您必须将 textareaEdit 添加到元素。否则它永远不会显示在页面上。看我的下一个答案
  • 对不起,但是当看看会发生什么jsfiddle.net/kTaGG 我需要 li 的值在 textarea 内,当我点击编辑时它只是附加 textareas 而我只需要一个里面有 li 值跨度>
  • 这是我在 textarea 中输入 d 并添加它时生成的代码
  • d
。所以 li 的值为 0。
  • 看这里jsfiddle.net/Juwmm/2 这是我在查询中创建的代码!我希望它在纯 js 中做同样的事情......
  • 当我点击编辑时不做任何事情。获取参考错误:未定义事件。但是您将
  • 【解决方案2】:

    更新代码

    函数 appendText(){

            var text = document.getElementById('usertext').value;
    
                if ( text ){
    
    
                    var li = document.createElement('li');
                    li.setAttribute('id', 'list');
                    li.innerHTML=text;
                    li.customProperty = text;
                    var editbutton = document.createElement('BUTTON');
                    editbutton.setAttribute('id', 'button_click');
                    editbutton.setAttribute('value','Edit');
                    editbutton.innerHTML='Edit';
    
    
    
                    var makeAreaEditable = function(){
                                function myFunction(e){
                                    var objLi = e.currentTarget;
                                    objLi.value = objLi.customProperty;
                                    document.getElementById("button_click").value = "ok";
                                    document.getElementById("button_click").innerHTML='ok';
                                };
                                var textareaEdit = document.createElement('textarea');
                                textareaEdit.customProperty = li.customProperty;
                                textareaEdit.onclick = myFunction;
                                li.appendChild(textareaEdit);
                            };
                    editbutton.onclick = makeAreaEditable;
    
    
                    var bigdiv = document.getElementById('addedText');
                    li.appendChild(editbutton);
                    bigdiv.appendChild(li);
                    document.getElementById('usertext').value = "";
            }
    };
    

    【讨论】:

      【解决方案3】:

      好吧,有几件事...

      首先,我改变了这一行:

      if ( document.getElementById('usertext').value ){
      

      到这里:

      if ( text ).value ){
      

      我已将 ID 添加到按钮:

      <button onClick="appendText()" id="button_click">Add text </button>
      

      并将这条线推低:

       editbutton.onclick = makeAreaEditable;
      

      你可以在这里找到可行的 jsfiddle: JSFIDDLE

      【讨论】:

      • 这对我来说很好...... jsfiddle.net/vUpSz makeAreaEditable 是问题......
      猜你喜欢
      相关资源
      最近更新 更多
      热门标签