使用 Parsley 验证 TinyMCE

2024-01-02

我有一个表单,它是多步骤向导的一部分。第一步,表单具有一个输入和一个 TinyMCE 编辑器。

在进入下一步之前,我使用 ParsleyJS 验证每个步骤的内容。我的向导步骤和验证代码定义如下:

<form class="form-horizontal" id="step1Form">
  <div class="form-group">
    <label for="name" class="col-sm-3 control-label">Name:</label>
    <div id="nameDiv" class="col-sm-9">
      <input type="text" maxlength="50" class="form-control" id="name" name="name" placeholder="Name" required="" data-parsley-group="block-1">
    </div>
  </div>

  <div class="form-group">
    <div class="col-sm-3 control-label">
      <label for="consumerId">Description:</label>
    </div>
    <div id="descDiv" class="col-sm-9">
      <div id="desc_area" data-type="textarea" data-pk="1" required="" data-parsley-group="block-1" data-parsley-tinymce="2"></div>
    </div>
  </div>
</form>

<script type="text/javascript">
jQuery(document).ready(function ($) {
    Parsley.addValidator('tinymce', {
      validateString: function(value) {
        // The validation code goes here
        return true;
      },
      messages: {
        en: 'The code is invalid. This should not be shown.'
      }
    });

    $.extend(Parsley.options, {
        errorClass: 'has-error',
        successClass: 'has-success',
        classHandler: function(el) {
            return el.$element.closest(".form-group");
        },
        errorsWrapper: '<span class="help-block">',
        errorTemplate: '<div></div>'
    });

    tinymce.init ({
      selector: '#desc_area',
      inline: false,
      force_br_newlines: false,
      force_p_newlines: true,
      forced_root_block: '',
      menubar: false,
      plugins: [
        'advlist autolink lists link image charmap print preview anchor',
        'searchreplace visualblocks code insertdatetime media contextmenu'
      ],
      toolbar: 'insertfile undo redo | bold italic | alignleft aligncenter alignright alignjustify | outdent indent | link image'
    });
});

function validateStep(step) {
  if (step == 1) {
    console.log("About to perform validation");
    return $('#step1Form').parsley({
      inputs: Parsley.options.inputs + ',[data-parsley-tinymce]'
    }).validate({group: 'block-1'});
  } else if (step == 2) {
    // validation for step 2
  } else if (step == 3) {
    // validation for step 3
  } else if (step == 4) {
    // validation for step 4
  }
  return false;
}
</script>

当我单击“下一步”时,它将 TinyMCE 编辑器标记为无效,而不调用自定义验证器。现在我确信我的验证器是不正确的,但我找不到如何定义自定义验证器(Parsley 的文档在涉及自定义验证器的定义元素时有点令人费解)。

知道如何让它发挥作用吗?


您应该将 TinyMCE 绑定到<textarea>而不是一个<div>。如果是这样,您不需要自定义验证器,您只需添加required or data-parsley-required属性。

检查这个工作中的jsfiddle https://jsfiddle.net/milz/kqrvfw1z/,以及下面的代码:

<form class="form-horizontal" id="step1Form">
    <div class="form-group">
        <label for="name" class="col-sm-3 control-label">Name:</label>
        <div id="nameDiv" class="col-sm-9">
            <input type="text" maxlength="50" class="form-control" id="name" name="name" placeholder="Name" required="" data-parsley-group="block-1">
        </div>
    </div>

    <div class="form-group">
        <div class="col-sm-3 control-label">
            <label for="consumerId">Description:</label>
        </div>
        <div id="descDiv" class="col-sm-9">
            <textarea id="desc_area" data-type="textarea" data-pk="1" required="" data-parsley-group="block-1"></textarea>
        </div>
    </div>
</form>

<script>
    jQuery(document).ready(function ($) {
        $.extend(Parsley.options, {
            errorClass: 'has-error',
            successClass: 'has-success',
            classHandler: function(el) {
                return el.$element.closest(".form-group");
            },
            errorsWrapper: '<span class="help-block">',
            errorTemplate: '<div></div>'
        });

        tinymce.init ({
            selector: '#desc_area',
            inline: false,
            force_br_newlines: false,
            force_p_newlines: true,
            forced_root_block: '',
            menubar: false,
            plugins: [
                'advlist autolink lists link image charmap print preview anchor',
                'searchreplace visualblocks code insertdatetime media contextmenu'
            ],
            toolbar: 'insertfile undo redo | bold italic | alignleft aligncenter alignright alignjustify | outdent indent | link image'
        });

        // NOTE: This is only here for testing purposes.
        // Somewhere in your code you should be validating each block
        $("form").parsley();
        $("form").on('submit', function(e) {
            e.preventDefault();

            $(this).parsley().validate();
            if ($(this).parsley().isValid()) {
                alert('ok');
            } else {
                alert('crap!');
            }
        })
    });
</script>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Parsley 验证 TinyMCE 的相关文章

  • 悬停此元素时隐藏元素后的伪元素

    我的菜单垂直放置在页面左侧和菜单之间 li 我有一个 after那是一个分隔符 我想要的是当我悬停元素本身 如果它是第一个元素 时隐藏 after 元素 或者当它是中间元素时隐藏上面和底部的元素 如果它是最后一个子元素 则隐藏 after前
  • Twitter 卡元标签问题

    有问题的网址 https www halleonard com viewpressreleasedetail action releaseid 10261 https www halleonard com viewpressreleased
  • 如何将内联 JavaScript 与 Express/Node.js 中动态生成的内容分开?

    对于具有几年 Web 开发经验但没有找到答案的人来说 这是一个有点菜鸟的问题程序员堆栈交换 or Google 我决定在这里问一下 我在用Express网络框架Node js 但这个问题并不特定于任何 Web 框架或编程语言 以下是从数据库
  • 图像无法在带有 DOM 的 IE 中加载:控制台中的 7009 错误(无法解码)

    当在 IE 中的单个页面上加载许多图像时 在 IE11 中重现 其中一些图像开始加载失败 并在控制台中出现类似以下警告的内容 DOM7009 无法解码 URL 处的图像 某些唯一的 url 当我查看网络流量时 似乎确实从服务器收到了每个图像
  • 使用 dc.js 按条形值对条形图中的条形进行排序(排序)

    如何通过维度的计算值而不是维度本身的名称对 dc js 示例中的 x 轴 维度 进行排序 例如 请考虑序数条形图的 dc js 示例 https github com dc js dc js blob master web examples
  • Draggable JS Bootstrap 模式 - 性能问题

    对于工作中的项目 我们在 JavaScript 中使用 Bootstrap Modal 窗口 我们想让一些窗口可移动 但我们遇到了 JQuery 的性能问题 myModal draggable handle modal header Exa
  • 防止 iOS 键盘在 cordova 3.5 中滚动页面

    我正在使用 Cordova 3 5 和 jQuery mobile 构建 iOS 应用程序 我在大部分应用程序中禁用了滚动功能 但是 当我选择输入字段时 iOS 键盘会打开并向上滚动页面 我不想要这个功能 由于输入足够高 键盘不会覆盖它 我
  • 如何纠正流警告:解构(缺少注释)

    我正在编写一个小型 React Native 应用程序 并且正在尝试使用 Flow 但我无法在任何地方真正获得有关它的正确教程 我不断收到错误 destructuring Missing annotation 有关 station 这段代码
  • 调整图像大小并将画布旋转 90 度

    这里有很多关于在 js 上使用画布旋转图像的主题 我阅读了其中的大部分内容 但无法找到解决我的问题的方法 我正在接收任何分辨率的图像 来自上传组件 我将其大小调整为 1024x768 如下所示 var canvas document cre
  • php - 解析html页面

    div divbox div p para1 p p para2 p p para3 p table class table tr td td tr table p para4 p p para5 p 有人可以告诉我如何解析这个 html
  • 在 HTML5 画布中,如何用我选择的背景遮盖图像?

    我试图用画布来实现这一点 globalCompositeOperation 但没有运气 所以我在这里问 这里有类似的问题 但我没有在其中找到我的案例 我的画布区域中有图层 从下到上的绘制顺序 画布底座填充纯白色 fff 用fillRect
  • 刷新页面时保存用户的选择

    我目前有一个页面显示不同团队的数据 我有一些数据 用户可以单击使其处于 打开 或 关闭 状态 并为每个数据显示不同的图标 它基本上就像一个清单 只是没有物理复选框 我想记住哪些 复选框 已被选中 即使在用户刷新页面或关闭浏览器并稍后返回之后
  • 从数据库检查数据的异步解决方案各种循环子句

    我想要做的是异步检查数据库并从中获取结果 在我的应用程序中我试图实现Asynchronously将此步骤解决为 从数据库中检查手机号码JsonArray循环子句的种类 Create JsonArray从结果 打印创建的数组 我学到了足够多的
  • 正则表达式 - 从 markdown 字符串中提取所有标题

    我在用灰质 https www npmjs com package gray matter 以便将文件系统中的 MD 文件解析为字符串 解析器产生的结果是这样的字符串 n Clean er ReactJS Code Conditional
  • Vue 和 Vuex:处理依赖的计算属性

    我的应用程序是一个使用 Vuex 在 Vue 中构建的精简电子表格 关键组件是TableCollection Table and Row The TableCollection有一个包含多个的数组Table对象 每个Table有一个包含多个
  • 使用css bootstrap时如何仅向一列添加右边框?

    我正在尝试使用CSS引导框架 http getbootstrap com css tables在我的项目中 我正在使用带有以下类的表table table bordered table striped 我想删除除第一列之外的所有列的边框 这
  • 如何使用 crypto-js 解密 AES ECB

    我正在尝试将加密数据从 flash 客户端 发送到服务器端的 javascript 在 asp 中作为 jscript 运行 有几个 javascript Aes 库 但它们实际上没有文档记录 我正在尝试使用 crypto js 但无法让代
  • 如何隐藏/禁用 Highcharts.js 中的图例框?

    我想问是否可以使用 HighCharts js 库隐藏图表中的所有图例框 var chart object chart renderTo render to type graph type colors graph colors title
  • Jquery - 选择选项后如何获取选项的特定数据类型?

    我将直接跳到标记 然后解释我想要做什么 HTML 选择选项
  • CSS溢出文本显示在几行中,没有断字

    我有一些长文本显示在 div 中 该 div 具有固定的宽度和高度 我希望文本显示在几行上 作为 div 高度 并且句子单词不会中断 一行中的单词前缀和下一行中的继续 此外 我想在末尾添加省略号最后一句话 CSS white space n

随机推荐