2017-08-28 61 views
1

我使用parsley.js验证器为我的表单编写了代码,但是除了CKEditor textareas,它工作正常。哪里可以解决问题?下面是截图enter image description hereparsley.js不适用于ckeditor textarea

这里是我的代码:

<script type="text/javascript"> 
CKEDITOR.on('instanceReady', function(){ 
     $.each(CKEDITOR.instances, function(instance) { 
     CKEDITOR.instances[instance].on("change",function(e) { 
      for (instance in CKEDITOR.instances) 
      CKEDITOR.instances[instance].updateElement(); 
     }); 
     }); 
    }); 
</script> 

<h2 class="heading">Description</h2> 
<div class="controls"> 
    <textarea name="description" id="description" required="" data-parsley-errors-container="#description-errors" data-parsley-required-message="Это поле необходимо!"></textarea> 
</div> 
<div style="margin-bottom: 20px;" id="description-errors"></div> 

<script> 
    CKEDITOR.replace('description'); 
</script> 

<h2 class="heading">Purpose</h2> 
<div class="controls"> 
    <textarea name="purpose" id="purpose" required="" data-parsley-errors-container="#purpose-errors" data-parsley-required-message="Это поле необходимо!"></textarea> 
    <div style="margin-bottom: 20px;" id="purpose-errors"></div><br><br> 
    <button type="submit" name="submit">Submit</button> 
</div> 


<script> 
    CKEDITOR.replace('purpose'); 
</script> 

回答

1

您的问题与需要属性有关。之后,该行:

CKEDITOR.on('instanceReady', function() { 

你需要重新添加这样的属性,对于每一个文本区域,因为在CKEDITOR初始化阶段丢失(即:CKEDITOR.replace(“目的”);)。

对于特定的textarea,你可以这样写:

$('#description').attr('required', ''); 

对于所有属于形式的textareas:

$('form textarea').attr('required', ''); 

从您的评论:

当错误显示其他输入,当我输入的东西会自动删除。但在textareas它不会离开

为了解决这部分,在CKEDITOR更改事件,您需要触发欧芹验证。以下线的伎俩:

$('form').parsley().validate(); 

更新的代码(的jsfiddle here):

CKEDITOR.on('instanceReady', function() { 
    $('form textarea').attr('required', ''); 
    $.each(CKEDITOR.instances, function (instance) { 
     CKEDITOR.instances[instance].on("change", function (e) { 
      for (instance in CKEDITOR.instances) { 
       CKEDITOR.instances[instance].updateElement(); 
       $('form').parsley().validate(); 
      } 
     }); 
    }); 
}); 
+0

你能解释一下请,我们为什么要加入这样的代码是什么这个代码是什么意思? –

+0

@JavidAbbasov你的textareas有** required =“”**。在CKEDITOR init中这个属性消失了,因此你需要重新设置它,在jQuery中你可以写:$('#description' ).attr('required','');或者如果你想为所有** $('textarea')。attr('required',''); **让我知道它是不是c李尔。 – gaetanoM

+0

哦,谢谢!一切都清楚了,但仍然有一个小问题。当其他输入中显示错误时,当我键入内容时会自动删除。但在textareas它不会离开https://yadi.sk/i/qEFXPqsi3MQ4PV。 –

0

它总是那么容易得多,如果你提供了一个最小的工作示例回答的问题......

ckeditor隐藏<textarea>并通过Javascript填充。

也许问题是错误容器是在错误的地方。

也很有可能ckeditor不会触发input事件(不是很知名)。如果是这种情况,下面的代码应该解决问题:

$('textarea').on('change', function() { $(this).trigger('input') }) 

请更新,如果这工作与否。

+0

它没有工作:( –