下拉值未保留

时间:2016-10-04 17:05:31

标签: javascript jquery ajax drop-down-menu

我有一个下拉列表,它从模型中获取其值并首先填充。单击该下拉列表,我使用AJAX填充其他值。我能够填充下拉列表但是一旦我从下拉列表中选择了一个选项,它就会在下拉列表中重置为第一个值。我想要的是在点击时填充一次的下拉菜单,然后像普通下拉列表一样运行。我该如何设定条件?

这是使用定义的值'field.Value'

初始设置下拉值的代码
ddlValue = "<option value="+field.Value+ " selected='selected'>" + field.Value+"</option>";

<td><select id='@String.Format("selValue{0}", field.Field)' class='ddlValue'>@Html.Raw(ddlValue)</select></td>

这是填充它的AJAX函数。

$('body').on('click', '.ddlValue', function () {
    var target = event.target.id;
    var rowId = $('#' + target).closest("tr").prop("id");
    var field = $('#' + rowId).find(".fieldvalue").html();

        $.ajax({
            cache: false,
            url: '@Url.Action("PopulateDropdown", "AdvancedSearch")',
            type: "POST",
            data: { Field: field }
        }).done(function (data) {

            var listb = $('#' + target);
            listb.empty();

            $.each(data.value, function (index, value) {
                listb.append($('<option>', {
                    value: value,
                    text: value
                }, '<option/>'))
            });

        });

});

2 个答案:

答案 0 :(得分:1)

如果您希望ajax填充只发生一次,则需要在事件监听器发生后将其删除。像这样:

libfreenect-dev

请注意,以下将工作:

$('.ddlValue').on('click', function () {

    $(this).off('click'); //This removes the event after it has happened once.

    var target = event.target.id;
    var rowId = $('#' + target).closest("tr").prop("id");
    var field = $('#' + rowId).find(".fieldvalue").html();

    $.ajax({
        cache: false,
        url: '@Url.Action("PopulateDropdown", "AdvancedSearch")',
        type: "POST",
        data: { Field: field }
    }).done(function (data) {

        var listb = $('#' + target);
        listb.empty();

        $.each(data.value, function (index, value) {
            listb.append($('<option>', {
                value: value,
                text: value
            }, '<option/>'))
        });

    });

});

答案 1 :(得分:0)

这似乎是一种愚蠢的做法。您可以在贷款时执行相同的操作,而无需与用户进行任何交互以填充下拉列表。

据说修复解决方案只需添加一个全局变量

$first = true
$('body').on('click', '.ddlValue', function () {
   if($first) {
      $first = false
      var target = event.target.id;
      var rowId = $('#' + target).closest("tr").prop("id");
      var field = $('#' + rowId).find(".fieldvalue").html();
      $.ajax({
         cache: false,
         url: '@Url.Action("PopulateDropdown", "AdvancedSearch")',
         type: "POST",
         data: { Field: field }
      }).done(function (data) {
         var listb = $('#' + target);
         listb.empty();
         $.each(data.value, function (index, value) {
         listb.append($('<option>', {
           value: value,
           text: value
         }, '<option/>'))
       });
     }
   });
});