【问题标题】:Laravel validation find input name with JQuery using dot array syntaxLaravel 验证使用点数组语法使用 JQuery 查找输入名称
【发布时间】:2023-03-30 19:02:01
【问题描述】:

如果我有来自 Laravel 的点数组语法,我如何在 JQuery 输入中找到名称?

输入示例:

<input type="text" name="Payments[0][1][Amount]">
<input type="text" name="Reservations[0][Date]">

来自 ajax 请求的 Laravel 验证响应:

errors: {
  Payments.0.1.Amount: "Field is required",
  Reservations.0.Date: "Field should be date"
}

问题:如果我只有数组点名称,我如何循环访问 javascript 访问输入名称中的错误数组?

例如,将Payments.0.1.Amount 转换为Payments[0][1][Amount],或将Reservations.0.Date 转换为Reservations[0][Date]

for (const [key, value] of Object.entries(errors)) {
     key = somehowParseDotInputToArray(key); // how? :)
   $('#app input[name="' + key + '"]').append( '<p class="error">'+ value +'</p>' );
}

【问题讨论】:

    标签: javascript jquery laravel


    【解决方案1】:

    已经找到解决方案,也许有人也帮忙:)

    function DotArrayToJs(str){
      var splittedStr = str.split('.');
    
      return splittedStr.length == 1 ? str : (splittedStr[0] + '[' + splittedStr.splice(1).join('][') + ']');
    }
    

    【讨论】:

      【解决方案2】:

      只需将错误对象中的名称从 . 中拆分出来。使用var $nameArr = name.split('.');

      假设name = Reservations.0.Date 会像 let nameArr = ['Reservations','0','Date']

      然后按你的意愿命名

      var newName = $nameArr[0] + '['+ $nameArr[1] +']' + '[' +$nameArr[2] + ']';
      

      newName 看起来像 Reservations[0][Date]

      为所有名称变量循环这个过程并创建新的错误对象。

      【讨论】:

      • 嗨,它不适用于“Payments.0.1.Amount”和没有数组的输入,例如 ->“Payments”。你可以看到我自己的答案,所有这些问题都解决了:)
      • 为此你需要 concat $nameArr[3]
      【解决方案3】:

      以防万一有人拥有多级数组

      	function getFieldnameFromLaravelDotName(laravelDotName) {
      
      		let parts = laravelDotName.split(".");
      		let fieldName = "";
      		let prefix = "";
      		let suffix = "";
      		parts.forEach((part, i) => {
      
      			if (fieldName != "") {
      
      				prefix = "[";
      				suffix = "]";
      
      			}
      
      			fieldName += prefix + part + suffix;
      
      		});
      
      		return fieldName;
      
      	}
        
        console.log(getFieldnameFromLaravelDotName("noDotInThis"));
        console.log(getFieldnameFromLaravelDotName("one.level"));
        console.log(getFieldnameFromLaravelDotName("many.level.array.plop"));

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-11-05
        • 2016-12-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多