【问题标题】:Adding element with jquery to empty list将带有 jquery 的元素添加到空列表
【发布时间】:2016-02-17 07:44:38
【问题描述】:

您好,我需要将项目添加到列表中,当列表有元素但列表为空时它可以工作javascript return undefined

这是我的函数:当列表为空时,namevalue 未定义我认为它的主要问题。

function submitAjaxForm(formId) 
{
   var form = $("<form></form>");
   var targetID = formId.substr(1);
   form.append($(formId).html());
   var nameValue = $(formId).find('.showDictionariesList').first().find('input[type="hidden"]').first().attr('name');  
   var indexToCut = nameValue.indexOf('[', nameValue.indexOf('[', 0) + 1);
   var featureIndex = nameValue.substring(0, indexToCut);
   var contentVal = $("#dropDownList option:selected").val(); 
   var returnValue = form.serializeArray();
   returnValue[returnValue.length - 1].value = contentVal;
}

这个列表

public List<ShowDictionaryModel> ShowDictionaries { get; set; }

该物品的类别:

public class ShowDictionaryModel
{
   public long Id { get; set; }  
   public string Value { get; set; }  
   public long? ProductId { get; set; } 
   public string FeatureId { get; set; }

   internal static ShowDictionaryModel FromDto(DictionaryDto dto)
   {
      ShowDictionaryModel model = new ShowDictionaryModel();
      model.Id = dto.Id;
      model.Value = dto.Value;
      model.ProductId = dto.ProductId;
      model.FeatureId = dto.FeatureId;
      return model;
   }
}

Cshtml 代码:showDictionariesList 是包含我要修改的列表的类

@model MultiShop.Panel.Models.Product.AddProductFeatureTextModel
<div>
        <div id="featureText-@Model.TypeId">

            @Html.HiddenFor(m => m.TypeId)
            @Html.HiddenFor(m => m.IsRequired)
            @Html.HiddenFor(m => m.Name)
            @Html.Label(Model.Name)
            @Html.TextBoxFor(m => m.Value)
            @if (Model.IsRequired)
            { 
                <span class="requiredField"></span>
            }
            @Html.ValidationMessageFor(m => m.Value)
            <div class="showDictionariesList">
                @Html.EditorFor(m => m.ShowDictionaries)
            </div>
            @Html.DropDownListFor(m => m.SelectedDictionaryItemId, new SelectList(Model.DictionaryItems, "Id", "Value", Model.SelectedDictionaryItemId), new { id = "dropDownList" })

            <input type="button" value="Save" onclick="@("submitAjaxForm('#featureText-" + @Model.TypeId + "')")" />
        </div>
        //}

【问题讨论】:

  • 你说的是哪个列表?也有助于查看 JavaScript 错误。
  • 我用cshtml代码编辑了主帖。
  • 如果你分享编译好的HTML而不是cshtml代码会更好
  • 在使用namevalue 之前,为什么不检查namevalue 是否不是undefined
  • 我可以,但是当我这样做时,当列表为空时代码仍然无法工作。 namevalue 在列表有元素时具有正确的值,否则 namevalueundefined

标签: javascript c# jquery model-view-controller


【解决方案1】:

您试图获取非现有对象的属性的问题 你应该检查后得到它

var container = $(formId).find('.showDictionariesList').first();
var nameValueObj = container.find('input[type="hidden"]').first();
if (nameValueObj.length !== 0){
   // input was found so we can get name attribute
   var nameValue= nameValueObj.attr('name');
   var indexToCut = nameValue.indexOf('[', nameValue.indexOf('[', 0) + 1);
   // .........
} else{
   // as far no input elements inside .showDictionariesList your logic to add first one item
   // container.append(
}  

【讨论】:

  • 我知道,但是当列表为空时我需要得到这个$(formId).find('.showDictionariesList').first().find('input[type="hidden"]').first();。你有什么想法吗?
  • 对不起,我很困惑,如果列表为空 .showDictionariesList 将不包含项目,您能否显示您想要访问的渲染 html 片段
  • FeatureTexts[0].ShowDictionaries[0].Id
  • 什么列表是空的?
  • 我已经更新了答案,当您添加第一个元素时,您尝试获取第一个输入并获取名称 attr,但您还没有项目,所以首先您应该检查,如果有输入您使用当前逻辑,如果没有,您应该设置例如 var featureIndex = 0 ;直接你不应该计算索引
【解决方案2】:

我得到了答案。如果为空,我只是用基本元素初始化列表。我的编程经验非常低,所以我的代码看起来很糟糕,但它可以按我的意愿工作。

if (!dictionaryType.HasItems())
        {
            DictionaryDto newForEmptyList = new DictionaryDto();
            List<DictionaryDto> newList = new List<DictionaryDto>();
            newForEmptyList.FeatureId = type;
            newForEmptyList.ProductId = productId;
            newForEmptyList.Value = "";
            newForEmptyList.Id = -1;
            newList.Add(newForEmptyList);
            dictionaryType = newList.ToArray();
        }

【讨论】:

    猜你喜欢
    • 2011-11-23
    • 2014-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多