0

嗨,我试图在 jquery 中创建一个编辑脚本,将 p 内容更改为输入字段,并让人们编辑它们,然后恢复为内容。

我的代码:

<div class="addressblock">
<div class="data">
<p name="bedrijfsnaam">company name</p>
<p name="tav">to whom</p>
<p name="adres">street and number</p>
<p name="postcode">1234AB</p> 
<p name="woonplaats">city</p>
<p name="land2" >Land</p>
</div>
<a href="#_" class="editinv" id="00001" name="edit">Edit</a>
</div>

jQuery =

$(document).ready(function () { 

$(".editinv").click(function() {

    var editid = $(this).attr("id");
    var edit_or_text = $(this).attr("name");

    if(edit_or_text == "edit"){


    $(this).closest('div').find('p').each(function(){

    var el_naam = $(this).attr("name");
    var el_content = $(this).text();

    $(this).replaceWith( "<input type='text' name='"+el_naam+"' id='" + el_id + "' value='"+el_content+"' />" );


});
$(".editinv").replaceWith( "<a href='#_' class='editinv' name='done' id='"+editid+"'>Done</a>" );

}

if(edit_or_text == "done"){

    $(this).closest('div').find('input').each(function(){

    var el_naam = $(this).attr("name");
    var el_content = $(this).attr("value");

    $(this).replaceWith( "<p name='"+el_naam+"' id='" + el_id + "'>'"+el_content+"' </p>" );


});
$(".editinv").replaceWith( "<a href='#_' class='editinv' name='edit' id='"+editid+"'>Bewerken</a>" );

}

});
});

单击编辑时,它会完美地更改为输入字段并将编辑按钮更改为完成按钮。尽管类是相同的,但从未注册过单击完成按钮。

有人有什么想法吗?

提前致谢!

编辑:我创建了问题的 JSfiddle http://jsfiddle.net/hBJ5a/

这很简单,为什么元素不接受第二次点击并在已更改后恢复?

4

3 回答 3

0

试用 jquery 可编辑插件

演示: http: //www.appelsiini.net/projects/jeditable/default.html

于 2013-10-23T12:30:49.567 回答
0

请注意,如果您将所有<p>标签的名称更改为相同的名称,并尝试将它们还原回来,javascript 将无法知道哪个值应该放在哪里。

您应该在<p>标签中添加一个额外的参数来指示类型。

例如

<p data-type="text" name="bedrijfsnaam">compname</p>

更改后将变为:

<input type="text" name="bedrijfsnaam" data-type="edit" value="compname" />

当您单击按钮变回时,您应该简单地使用您当前使用的相同功能将 's 更改<p><input>'s,然后颠倒顺序。

例如

function inputToParagraph() {

    var inputs = $('input[data-type="edit"]');
    inputs.each(function() {
        $(this).replaceWith('<p data-type="text" name="'+$(this).attr('name')+'">'+$(this).attr('value')+'</p>');
    });
}

当然,您应该将其他操作链接到您的提交,也可能是一个 ajax 请求来更新数据库。

注意 未经测试,但知道上面的功能,如果指定了所有 attr 将起作用。它将直接用具有给定属性的 P 标签替换输入。

您必须确保当您将<p>'s 设置为<input>'s 时,您必须确保输入也获得正确的属性。

于 2013-10-23T10:44:54.273 回答
0
<!DOCTYPE html>
<html>
<head>
    <title>Test</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <script type="text/javascript" src="http://code.jquery.com/jquery-2.0.3.min.js"></script>
    <script type="text/javascript">
        var clickHandler = function() {
            var editid = $(this).attr("id");
            var edit_or_text = $(this).attr("name");
            if (edit_or_text == "edit") {
                $(this).closest('div').find('p').each(function() {
                    var el_id = $(this).attr("id");
                    var el_naam = el_id; //$(this).attr("name");
                    var el_content = $(this).text();
                    $(this).replaceWith("<input type='text' name='" + el_naam + "' id='" + el_id + "' value='" + el_content + "' />");
                });
                $(".editinv").replaceWith("<a href='#_' class='editinv' name='done' id='" + editid + "'>Done</a>");
            }
            else /* if (edit_or_text == "done") */ {
                $(this).closest('div').find('input').each(function() {
                    var el_id = $(this).attr("id");
                    //var el_naam = el_$(this).attr("name");
                    var el_content = document.getElementById(el_id).value;
                    // Attribute "name" not allowed on element "p" at this point
                    //$(this).replaceWith("<p name='" + el_naam + "' id='" + el_id + "'>'" + el_content + "' </p>");
                    $(this).replaceWith("<p id='" + el_id + "'>" + el_content + "</p>");
                });
                $(".editinv").replaceWith("<a href='#_' class='editinv' name='edit' id='" + editid + "'>Bewerken</a>");
            }
            document.getElementById("00001").onclick = clickHandler;
        }

        $(document).ready(function() {
            document.getElementById("00001").onclick = clickHandler;
        });
    </script>
    <style type="text/css">

    </style>
</head>
<body>
    <div class="addressblock">
        <div class="data">
            <!-- Attribute "name" not allowed on element "p" at this point -->
            <p id="bedrijfsnaam">company name</p>
            <p id="tav">to whom</p>
            <p id="adres">street and number</p>
            <p id="postcode">1234AB</p> 
            <p id="woonplaats">city</p>
            <p id="land2">Land</p>
        </div>
        <a href="#_" class="editinv" id="00001" name="edit">Edit</a>
    </div>
</body>
</html>

使用 Firefox 24.0 / Linux 测试

于 2013-10-23T12:10:19.337 回答