【问题标题】:show input fields instead of text when you click an "edit" link单击“编辑”链接时显示输入字段而不是文本
【发布时间】:2013-09-07 07:03:58
【问题描述】:

我目前正在创建一个后端。我需要的是一些 jquery 来插入一些不同的表单字段。例如,我可以有这个代码:

<div>
    <div>
        Name
    </div>
    <div>
        Type
    </div>
    <div>
        <a class="edit" href="#">Edit</a>
    </div>
</div>

此代码需要进行转换,以便在我单击 a.edit 时将名称和类型文本插入两个输入字段的值

编辑:

我已经尝试过这段代码 - 但是当我点击“a.ff-save”时它没有提醒???我的问题是什么?

<script type="text/javascript">
$(document).ready( function() {
    var this_form_id = $("input#form_id").val();
    $("#formfield-list div.formfield-ff:odd").css('background', '#f6f6f6');


    $("a.ff_add").click( function() {
        var name_val = $("input#new_field_name").val();
        var type_val = $("input#new_field_type").val();
        var demand_val = $("input#new_field_demand").val();
        $.ajax({
            type: "POST",
            url: "{pref_folder}/admix/forms/addFormField",
            data: ({ form_id: this_form_id, field_name: name_val, field_type: type_val, field_demand: demand_val }),
            success: function(text) {

                $.ajax({
                    type: "post",
                    url: "{pref_folder}/admix/forms/getFormFields",
                    data: { form_id: this_form_id },
                    success: function(t) {
                        $("#formfield-list").empty().append(t);
                        $("#formfield-list div.formfield-ff:odd").css('background', '#f6f6f6');
                    },
                    dataType: "html"
                });


                $(".add-succes-message").empty().append('<div class="msg">'+text+'</div>');
                $(".add-field-row").slideUp(500, function(){
                    $(".add-field-row").slideDown(500);
                }).delay(3500);
                $(".add-succes-message").slideDown(500, function(){
                    $(".add-succes-message").slideUp(500);
                }).delay(3500);

            },
            cache: false,
            async: false,
            dataType: "html"
        });
    });

    $("a.ff-save").click(function (){
        alert("ok");
    });

    $("a.ff-edit").click(function (){
        var fid = $(this).prev().val();

        var nameValue = $("#ff-"+fid+" div.ff-name").html().trim();
        var typeValue = $("#ff-"+fid+" div.ff-type").html().trim();
        var demandValue = $("#ff-"+fid+" div.ff-demand").html().trim();
        var typeInt;

        if( typeValue == "Tekstfelt, 1 linje" )
        {
            typeInt = 1;
        } else {
            typeInt = 0;
        }


        $("#ff-"+fid+" div.ff-name").html('<input type="text" name="name" class="jq-input" value="'+nameValue+'" />');
        $("#ff-"+fid+" div.ff-type").html('<input type="text" name="type" class="jq-input" value="'+typeInt+'" />');
        if( demandValue == "Ja")
        {
            $("#ff-"+fid+" div.ff-demand").html('<input type="checkbox" name="demand" class="jq-input" value="" checked="checked" />');
        } else {
            $("#ff-"+fid+" div.ff-demand").html('<input type="checkbox" name="demand" class="jq-input" value="" />');
        }

        $("#ff-"+fid+" .ff-edit, #ff-"+fid+".ff-delete").hide();
        $("#ff-"+fid+" div:last").html('<a href="#" class="ff-save">Save</a>');
    });

    $("a.ff-delete").click();
});
</script>

【问题讨论】:

    标签: jquery xhtml click


    【解决方案1】:

    检查这个 jQuery 插件。它完全符合您的要求。

    JEditable

    如果您不倾向于使用该插件,请尝试以下代码:

    <div>
        <div>
            <label class="editable">Name</label>
            <input class="editable" type="text" name="name" style="display:none"/>
        </div>
        <div>
            <label class="editable">Type</label>
            <input class="editable" type="text" name="type" style="display:none"/>
        </div>
        <div>
            <a class="edit" href="#">Edit</a>
        </div>
    </div> 
    <script type="text/javascript">
        $(function(){
            $(".edit").click(function(){
                var $this = $(this);
                var text = $this.text();
                if(text=="Edit"){
                    $this.text("Cancel");
                }
                            else{
                                 $this.text("Edit");
                            }
                $(".editable").toggle();
            });
    
            $("input.editable").change(function(){
                $(this).prev().text($(this).text());
    
            });
        });
    </script>
    

    编辑:

    要将 click 事件处理程序绑定到锚元素,请使用 jQuery 的 live 函数。 例如:

    $("a.ff-save").live("click", function (){         
     alert("ok");     
    });
    

    【讨论】:

    • 以某种方式是的 - 但我需要将两个文本字符串都转换为字段,然后当您单击“保存”时,它会保存在两个字段中所做的编辑。
    • @Dennis:你能发布完整的 HTML。您是否将点击事件绑定到就绪事件处理程序中的 .ff-save ?您是否将 .ff-save 动态添加到 DOM 中?如果是,那么您应该使用 live。
    • @Cyber​​nate:编辑:现在我已经添加了整个 JS/Jquery - 可以吗? ....... 原味精:我在这里添加 a.ff-save:$("#ff-"+fid+" div:last").html('保存');我正在使用一个带有伪变量的框架,所以它可以是很多行。
    • @Dennis:由于您要动态添加 ff-save 以绑定 click 事件处理程序,因此您应该使用 live 函数。例如:$("a.ff-save").live("click", function (){ alert("ok"); });
    • @Dennis:还将直播功能的格式化代码添加到原始帖子中。检查一下。
    【解决方案2】:

    我尝试了几种不同的方法,这就是我想出的:

    HTML:

    <span class="subject">
        <span class="text"> subject </span>
        <input class="input" type="text" name="subject" val="subject" hidden/>
    </span>
    

    jquery:

    function showInput(){
        $(this).off('click');
        $(this).siblings('input').each(function(){$(this).show();});
        $(this).siblings('input').focus();
        $(this).hide();
    }
    function hideInput(){
        $(this).hide();
        $(this).siblings('span').show();
        $(this).siblings('span').click(showInput);
    }
    $(function(){
        $('.text').click(showInput);
        $('.input').blur(hideInput);
    }
    

    简单地说,当你点击给定的文本时,它会变成一个输入框,当输入框失去焦点时,它又会变成普通文本。

    我还将显示/隐藏函数分开了可调用函数,这样我就可以在 hideInput 函数中重置点击侦听器。

    【讨论】:

    • 欢迎来到 SO!这是一个很好的答案的一个很好的例子。感谢您的贡献。
    【解决方案3】:

    我在工作中做了类似的事情,这是我的解决方案:

    HTML

    <div id='container'>
        <div id='name' class='text'>
            Name
        </div>
        <div id='type' class='text'>
            Type
        </div>
        <div>
            <a class="edit" href="#">Edit</a>
        </div>
    </div>
    

    JQuery

    function StartEditState() {
        var container = $('#container');
        container.find('a.edit').unbind('click').click(SaveEditState).html('Save'); //this changes edit button save button
        container.find('div.text').each(function() {
            $(this).html('<input class="new_val" type="text" value="' + $(this).html() + '" /><input class="orig_val" type="hidden" value="' + $(this).html() + '" />'); // this creates a hidden with the old value and an input that they can change
        });
        return false;
    }
    

    要保存值,您只需要这样做$('#name input.new_val').val()(对于名称,使用#type 作为类型)或返回原始值使用$('#name input.orig_val').val()

    希望你喜欢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-10
      相关资源
      最近更新 更多