jQuery亵渎过滤器在输入时不会更新

时间:2015-04-04 22:34:46

标签: javascript jquery html dynamic profanity

我想使用此profanity filter动态过滤坏词。 api将改变" ass"到" ***"在给定的示例中,仅当文本在页面加载之前存在时。我希望它能够在输入时更改已识别的坏词,以防止有人通过我的联系表单发送顽皮的消息。

以下是我到目前为止所做的事情:

   <div id="msg">
      <textarea type="text" onkeypress="badFilter()" id="mess_box" name="cf_message" style="height:150px;" maxlength="500" placeholder="Message" ></textarea>
   </div>

   <script>
      function badFilter() {
      $typedText = $('#mess_box').val();
      $typedText.profanityFilter({
         customSwears: ['ass']
      });
      }
   </script>

我认为&#39; onkeypress&#39;属性将强制脚本检查更新的textarea值,但事实并非如此。

帮助表示赞赏!

4 个答案:

答案 0 :(得分:0)

我不知道插件是如何工作的,但是

$typedText = $('#mess_box').val();  <-= reading the value, storing a string
$typedText.profanityFilter({  <-- expects jQuery object of an element, you have a string
   customSwears: ['ass']
});

应该是

$('#mess_box').profanityFilter(...);

答案 1 :(得分:0)

您正在将过滤后的值分配给变量,然后您没有使用它。

function badFilter() {
 $typedText = $('#mess_box').val();
 $typedText.profanityFilter({
  customSwears: ['ass']
 });
 $('#mess_box').val($typedText);
}

最后一行将文本应用回输入框。

问题是您正在键入用户键入时输入元素的值。这样,如果用户在文本的中间键入(而不是在结尾),则会出现毛刺。

您可以创建一个由两个输入控件(一个隐藏,一个可见)组成的系统,其中用户键入一个(隐藏),审查文本显示在可见文本中。当用户将光标定位在可见控件中时,您可以将其放置在不可见控件中的相同字符上。在用户写作时,更新可见控件的文本不会出现故障。

仅当profanityFilter可以使用字符串对象时,这才有效。 如果没有,初始化它的正确方法是

$('#mess_box').profanityFilter({
 customSwears: ['ass']
});

答案 2 :(得分:0)

为了清除我的问题的模糊性,我正在使用的亵渎过滤器就是这个 - &gt; https://github.com/ChaseFlorell/jQuery.ProfanityFilter

根据我的理解(这不是很好),插件不是为了在输入时动态过滤单词,这可能需要Angularjs或更多DOM操作。

Vinko Bradvica提供了一个很好的解释并解决了这个插件,以便在输入错误的单词时动态审查。

答案 3 :(得分:0)

处理它的正确方法就是:

使用preg_match('/^.*\b2\b.*\b9\b.*$/mg', $wholeCsvFile);

在html中创建<p>标记

然后在JS文件中添加此代码:

style="visibility: hidden;"