0

我想使用这个亵渎过滤器动态过滤坏词。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>

我认为“onkeypress”属性会强制脚本检查更新的 textarea 值,但事实并非如此。

帮助表示赞赏!

4

4 回答 4

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(...);
于 2015-04-04T22:46:36.153 回答
0

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

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

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

问题是您在用户键入时更改了输入元素的值。这样,如果用户在文本中间(而不是末尾)键入,就会出现故障。

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

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

$('#mess_box').profanityFilter({
 customSwears: ['ass']
});
于 2015-04-04T22:53:00.777 回答
0

为了消除我的问题的含糊之处,我使用的亵渎过滤器是这个 --> https://github.com/ChaseFlorell/jQuery.ProfanityFilter

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

Vinko Bradvica 提供了一个很好的解释,并使用这个插件解决了这些问题,以便在输入时动态审查坏词。

于 2015-06-19T19:44:22.950 回答
0

正确的处理方式是这样的:

<p>在你的 html 中创建一个标签style="visibility: hidden;"

然后将此代码添加到您的 JS 文件中:

$('#textarea').keyup(function () {
    $('#textarea-filter').text($('#textarea').val());
    $('#textarea-filter').profanityFilter({
      customSwears: ['ass']
    });
    $('#textarea').val($('#textarea-filter').text());
});
于 2016-01-17T09:02:06.110 回答