动态字段上的jQuery x-editable插件?

dzo*_*rdz 5 jquery input dynamic x-editable

我制作了一个脚本,可以在点击按钮时添加动态输入,并使用相应的x按钮删除不需要的输入.我需要在每个新创建的动态输入上添加x-editable插件.我正在使用x-editable,以这种方式,在x-editable弹出窗口中的选定选项上,右侧的输入获得与所选选项对应的值.

我已经使用静态元素进行了这项工作,但是使用动态元素我有很大的问题.首先,与所有html结构一起,使用其类名+动态字段数生成所有动态元素的.确切地说,我正在使用配置的Fieldcount执行此操作:var FieldCount = 1;然后在生成html代码的部分中添加类似的内容class="privacy-dynamic'+ FieldCount +'".然后第一个动态元素在html代码中调用类privacy-dynamic2,第二个获取privacy-dynamic3,依此类推.

现在,我的第一个结论是我需要以某种方式为x-editable添加一个类似的选项,其中我将创建一个相同的脚本, + FieldCount +因此每个x-editable弹出窗口将对应于从左边的"结果输入"而不是一个弹出窗口所有动态输入.

我尝试以与生成html结构相同的方式生成x-editable脚本,但它没有用.傻傻的尝试,我知道,用脚本生成脚本,但我很绝望.

我真的不知道它是如何解决的,我是一个jquery菜鸟,我迷失了它.它能以某种方式解决吗?

下面是当前情况,其中第一个静态字段具有x-editable working,而动态字段具有相同的结构,可用于x-editable但没有脚本:http://jsfiddle.net/dzorz/QxMs7/

HTML:

<div class="container">    
    <input type="text" class="main_activity" id="main_activity" name="main_activity" placeholder="Main activity">
    <div class="parentToDelegate">
        <a href="#" id="privacy" class="privacy" data-type="select" data-pk="1" data-value="1" data-original-title="Select visibility">public</a>
        <input type="text" id="privacy_result" class="privacy_result" value="1"/>     
    </div>

    <div class="row">
        <div id="InputsWrapper">
        </div>
    </div>
    <div class="row">
        <span id="AddMoreBox" class="btn btn-info pull-right"><i class="icon-plus"></i>Add More</span>
    </div>
Run Code Online (Sandbox Code Playgroud)

脚本:

//x-editable
$('.privacy').editable({
    showbuttons: false,
    unsavedclass: null,
    type: 'select',
    inputclass: 'input-medium privacy-select',
    source: [
        {value: 1, text: 'public'},
        {value: 2, text: 'approved contacts only'},
        {value: 3, text: 'matching contacts'},
        {value: 4, text: 'invisible'}
    ],

});

$(function(){
        $('.parentToDelegate').on('change keyup blur', ".privacy-select", function(){
            $('.privacy_result').val($('.privacy-select').val());
        }).blur();
    });

//dynamic fields
$(document).ready(function() {

var MaxInputs       = 5; //maximum input boxes allowed
var InputsWrapper   = $("#InputsWrapper"); //Input boxes wrapper ID
var AddButton       = $("#AddMoreBox"); //Add button ID

var x = InputsWrapper.length; //initlal text box count
var FieldCount=1; //to keep track of text box added

$(AddButton).click(function (e)  //on add input button click
{
//         if(x <= MaxInputs) //max input box allowed
//         {
        FieldCount++; //text box added increment
        //add input box
        $(InputsWrapper).append('\
        <div>\
        <input type="text" class="other_activity"\
        name="other_activity" id="other_activity"\
        placeholder="Other activity" style="margin:0px 15px 10px 0px"/>\
        <a href="#" class="removeclass"><i class="icon-remove icon-remove-add"></i></a>\
            <div class="parentToDelegate-dynamic'+ FieldCount +' parent-dynamic">\
                <a href="#" id="privacy-dynamic" class="privacy-dynamic'+ FieldCount +'" data-type="select" data-pk="1" data-value="1" data-original-title="Select visibility">public</a>\
                <input type="text" id="privacy-result-dynamic'+ FieldCount +'" name="privacy-result-dynamic'+ FieldCount +'" class="privacy-result-dynamic'+ FieldCount +' privacy_dynamic" value="1"/>\
            </div>\
        </div>');
        x++; //text box increment
//         }
return false;
});

$("body").on("click",".removeclass", function(e){ //user click on remove text
    if( x > 1 ) {
            $(this).parent('div').remove(); //remove text box
            x--; //decrement textbox
    }

            $('.income_count').trigger('change');
            return false;
});

});
Run Code Online (Sandbox Code Playgroud)

CSS:

.container{
   padding-top:100px
}

.privacy_result, .privacy_dynamic{
    width: 40px;
}

.main_activity, .other_activity{
    width: 140px;
}

.parentToDelegate{
    display:inline;
}

.icon-remove-add{
    margin-left: -10px;
    margin-top: -8px;
}

.parent-dynamic{
    display: inline;
    top: -5px;
    left: 10px;
    position: relative;
}
Run Code Online (Sandbox Code Playgroud)

欢迎任何帮助或建议,您可以自由编辑我的jsfiddle并将其发回

小智 0

您可以使其在调用函数的动态字段上工作,如下所示:

$(document).on('click', '.xedit',function (e) { e.preventDefault(); $(this).editable(your function here); });

确保将 .xedit 类添加到动态字段中。

我更新了你的小提琴以展示它是如何工作的:http ://jsfiddle.net/javimarcos/m7sj2/

您应该删除动态字段中的 id(它们都具有相同的 id)。