jquery clone()打破了表单验证

时间:2013-01-07 20:35:47

标签: jquery ruby-on-rails forms coffeescript angularjs

我在通过指令生成的表单中有一个字段:

它以ng-pristine,ng-valid,ng-valid-required开头。 (它通过服务器端请求填充。)

有一个删除按钮,为了确保与rails表单处理的兼容性,只需将其删除并在提交按钮之前添加克隆和隐藏。

onclick逻辑如下:

 scope.removeDecisionRule = (index, e) ->
     parent = angular.element(e.target).parent()
     unless parent.hasClass('brand-new')
       parent = parent.clone()
#      parent.css("display", "none")
       parent.find('input[name$="[_destroy]"]').val("1")
       parent.appendTo('form').eq(0)
       scope.decisionRules.splice(index, 1)

splice将其从填充初始表单的数组中删除,从而将控制权转交给指令,该指令随后从页面中删除元素,而['_destroy']字段是rails要求。

元素出现在页面上(这就是为什么display = none被注释掉了。)

然而,在表单提交时,似乎会通过角度验证进行标记(输入框轮廓变为红色)。它仍然设置为ng-pristine,ng-valid,ng-valid-required。

输入输入框并编辑其值(删除一个字符,然后读取),删除该块。所以hack是在scope.decisionRules.splice:

之前添加以下内容
 parent.find("input").each (index, element)->
      angular.element(element).val(angular.element(element).val())

现在我的问题是:为什么会出现这种情况,如果没有客观上可怕的黑客攻击,我该如何避免呢?

谢谢!

0 个答案:

没有答案