JQuery автозаполнение для динамически генерируемых текстовых полей - PullRequest
0 голосов
/ 27 февраля 2012

Я новичок в jquery, я работаю над веб-страницей, которая требует динамического создания текстовых полей с помощью автозаполнения.Я не знаю, как связать событие сгенерированным текстовым полем.мой код выглядит следующим образом:

 $(document).ready(function () {

    var counter = 1;

    $(".addButton").live("click", function () {

        var newTextBoxDiv = $(document.createElement('div'))
  .attr("id", 'TextBoxDiv' + counter);

        newTextBoxDiv.html('<TABLE><TR><TD>' + '<input type="text" name="textbox' + counter + '" id="textbox' + counter + '" value="" ></TD>&nbsp;<TD><a href="#" value="addButton" class="addButton">Add</a>&nbsp;</TD></TR></TABLE>');

        newTextBoxDiv.appendTo("#TextBoxesGroup");
        counter++;
    });
});

и отправьте запрос

function fillTextBox(text) {
    $.ajax(
        {
            type: 'POST',
            url: '@Url.Action("_AutoCompleteAjaxLoading", "CommandEntity")',
            async: true,
            data: { text: text},
            dataType: "json",
            traditional: true,
            success: function(data) {
                //what I should do here?
            },
            error: function(xhr, ajaxOptions, thrownError) {

            }
        });
}

Ответы [ 2 ]

3 голосов
/ 27 февраля 2012

Вы можете использовать плагин jquery ui autocomplete :

Контроллер:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult _AutoCompleteAjaxLoading(string term)
    {
        var data = new[] { "item 1", "item 2", "item 3" };
        return Json(data, JsonRequestBehavior.AllowGet);
    }
}

Просмотр:

<script type="text/javascript">
    $(function () {
        setupAutoComplete();
        var counter = 2;
        $('#TextBoxesGroup').delegate('a.addButton', 'click', function (evt) {
            evt.preventDefault();
            $('<table/>', {
                html: $('<tr/>', {
                    html: $('<td/>', {
                        html: $('<input/>', {
                            type: 'text',
                            id: 'textbox' + counter,
                            name: 'textbox' + counter
                        })
                    }).after($('<td/>', {
                        html: $('<a/>', {
                            href: '#',
                            'class': 'addButton',
                            text: 'Add'
                        })
                    }))
                })
            }).appendTo('#TextBoxesGroup');
            setupAutoComplete();
            counter++;
        });
    });

    var setupAutoComplete = function () {
        $(':text[name^="textbox"]').autocomplete({
            source: '@Url.Action("_AutoCompleteAjaxLoading")',
            minLength: 2,
            select: function (event, ui) {

            }
        });
    };
</script>

<div id="TextBoxesGroup">
    <table>
        <tr>
            <td>
                <input type="text" name="textbox1" id="textbox1" value="" />
            </td>
            <td>
                <a href="#" class="addButton">Add</a>
            </td>
        </tr>
    </table>
</div>
1 голос
/ 27 февраля 2012

Я не совсем уверен, что тебе нужно.Попробуйте добавить строку вроде

$('#textbox' + counter).keypress( function(){
  // here trigger autocomplete event
} )

или

 $('#textbox' + counter).keypress( fillTextBox( $(this).val() ) ) 
...