我只是想用下面的代码和逻辑来解决这个问题,寻找一个纯JavaScript的解决方案.我一直无法获取textarea字段的值,该字段的名称包含作为其名称子字符串的礼物消息.你能帮我修一下吗?

HTML格式如下:

<span class="bold_option_element">
    <textarea name="properties[Enter Gift Message Below. NO EMOJIS PLEASE. Remember to sign your name! ]" class="ta_570739_262324" maxlength="1000">
    </textarea>
  <textarea name="properties[Test Gift ]" class="ta_570739_262324" maxlength="1000">
    </textarea>
</span>

JavaScript:

<script>
    {%- comment -%}
        This block of code checks if emojis are present in gift message, on keyup event
        Logic:
        1. Get value of textarea field for gift message.
        2. Get the textarea "bold_option_element" fields whose name has "GiftMessage" after stripping all blanks.
        3. Return false if emojis are present.
        Refer: https://melvingeorge.me/blog/check-if-string-contain-emojis-javascript for emoji validation
    {%- endcomment -%}
    window.onkeyup = function(e) {
        // Get gift message string.
        giftMessage = "Hello ???? ????";
        let textAreaElements = document.getElementsByClassName('bold_option_element');
        console.log(textAreaElements);
        const regexExp = /(\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff])/gi;
        if (regexExp.test(giftMessage)) {
            alert("No EMOJIs are allowed in the Gift Message. EMOJIs have been deleted in the Gift Messsage. Edit your Gift Message and 'Add to Cart'");
            return false;
        }
        return true;    
    };
</script>

链接到jsfiddle:https://jsfiddle.net/pramodraam/vhqyj15m/6/

推荐答案

将 Select 器移到keyup处理程序之外.

name属性中包含Gift Message的文本区域的 Select 器为:

".bold_option_element > textarea[name*='Gift Message']"

我在.querySelectorAll()中使用了它,你将在下面看到.

最后,由于这是异步的,因此从事件侦听器返回值是一个noop.您需要在处理程序本身中使用该布尔值,如下所示.

代码被注释.

// Get only the textareas with "Gift Message" in name attribute
let textAreaElements = document.querySelectorAll(".bold_option_element > textarea[name*='Gift Message']");

// Add event listener to each textarea with "Gift Message" in name attribute
textAreaElements.forEach(element => {
  element.addEventListener('keyup', checkForEmoji);

});
// keyup event handler to check for emoji
function checkForEmoji(e) {
  // Stores result of async Operation
  let result = true;

  const regexExp = /(\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff])/gi;
  if (regexExp.test(e.target.value)) {
    alert("No EMOJIs are allowed in the Gift Message. EMOJIs have been deleted in the Gift Messsage. Edit your Gift Message and 'Add to Cart'");

    // EDIT: Added code to remove emoji
    e.target.value = e.target.value.replaceAll(regexExp, '');

    result = false;
  }
  // Do something with result here
  console.log(result);
};
<span class="bold_option_element">
  <textarea name="properties[Enter Gift Message Below. NO EMOJIS PLEASE. Remember to sign your name! ]" class="ta_570739_262324" maxlength="1000"></textarea>
  <textarea name="properties[Test Gift ]" class="ta_570739_262324" maxlength="1000"></textarea>
</span>

Javascript相关问答推荐

为什么getRecord()会因为与_logger相关的错误而失败?(使用Hedera SDK)

fs. writeFile()vs fs.writeFile()vs fs.appendFile()

jQuery提交按钮重新加载页面,即使在WordPress中使用preventDefault()

拖放仅通过 Select 上传

如何在Angular中插入动态组件

判断表格单元格中是否存在文本框

查找最长的子序列-无法重置数组

环境值在.js文件/Next.js中不起作用

如何在DYGRAPS中更改鼠标事件和键盘输入

在VS代码上一次设置多个变量格式

当代码另有说明时,随机放置的圆圈有时会从画布上消失

将范围 Select 器添加到HighChart面积图

我不知道如何纠正这一点.

如何在Jest中模拟函数

如果我的列有条件,我如何呈现图标?

重新渲染过多(&Q).REACT限制渲染次数以防止无限循环.使用REACT下拉菜单时

更改管线时不渲染组件的react

在HTML中使用meta标记来指定定制元数据以用于使用JavaScript进行检索是不是一个坏主意?

如何使用useparams从react路由中提取id

如何将值从后端传递到前端