为啥 JS 字符限制会在 Safari 中被打破?

Posted

技术标签:

【中文标题】为啥 JS 字符限制会在 Safari 中被打破?【英文标题】:Why would JS character limits break in Safari?为什么 JS 字符限制会在 Safari 中被打破? 【发布时间】:2018-10-11 12:18:37 【问题描述】:

我正在使用 JS 对输入进行一些字符限制(因为在 Shopify 上没有任何其他方法可以做到这一点),它在 FF 和 Chrome 中运行良好,但在 Safari 中我收到以下错误:

SyntaxError:字符串与预期的模式不匹配。

指下面form:内的定义

document.addEventListener('DOMContentLoaded', function () 
var shippingAddressEl = document.querySelector('.section--shipping-address')
if (shippingAddressEl) 
  var formValidation = 
    els: 
      el: shippingAddressEl,
      form: 
        firstname: shippingAddressEl.querySelector('input[name="checkout[shipping_address][first_name]"]:not([data-honeypot="true"]'),
        lastname: shippingAddressEl.querySelector('input[name="checkout[shipping_address][last_name]"]:not([data-honeypot="true"]'),
        company: shippingAddressEl.querySelector('input[name="checkout[shipping_address][company]"]:not([data-honeypot="true"]'),
        addressLine1: shippingAddressEl.querySelector('input[name="checkout[shipping_address][address1]"]:not([data-honeypot="true"]'),
        addressLine2: shippingAddressEl.querySelector('input[name="checkout[shipping_address][address2]"]:not([data-honeypot="true"]'),
        city: shippingAddressEl.querySelector('input[name="checkout[shipping_address][city]"]:not([data-honeypot="true"]'),
        postcode: shippingAddressEl.querySelector('input[name="checkout[shipping_address][zip]"]:not([data-honeypot="true"]'),
        phone: shippingAddressEl.querySelector('input[name="checkout[shipping_address][phone]"]:not([data-honeypot="true"]')
      
    
  
);

如何解决这个错误?

【问题讨论】:

【参考方案1】:

编辑:我找到了原因:

form 对象中的几乎每个值都缺少 )

city: shippingAddressEl.querySelector('input[name="checkout[shipping_address][city]"]:not([data-honeypot="true"]'),

【讨论】:

不,创建 JSON 不需要引号。试试var json = a: 1, b: 2 。它有效 @JagdeepSingh 更新了我的帖子。再次感谢。 @JagdeepSingh 是一个 object - JSON 是一个字符串 天啊,它总是最简单的事情!完全错过了!谢谢! @tom_mai78101 我的意思是to create a JSON 评论。 JSON 代表 javascript Object Notation,它是一个字符串类型,而 a: 1, b: 2 是一个普通对象,不是 JSON。【参考方案2】:

您在每一行都缺少右括号:

var formValidation = 
  els: 
    el: shippingAddressEl,
    form: 
      firstname: shippingAddressEl.querySelector('input[name="checkout[shipping_address][first_name]"]:not([data-honeypot="true"])'),
      lastname: shippingAddressEl.querySelector('input[name="checkout[shipping_address][last_name]"]:not([data-honeypot="true"])'),
      company: shippingAddressEl.querySelector('input[name="checkout[shipping_address][company]"]:not([data-honeypot="true"])'),
      addressLine1: shippingAddressEl.querySelector('input[name="checkout[shipping_address][address1]"]:not([data-honeypot="true"])'),
      addressLine2: shippingAddressEl.querySelector('input[name="checkout[shipping_address][address2]"]:not([data-honeypot="true"])'),
      city: shippingAddressEl.querySelector('input[name="checkout[shipping_address][city]"]:not([data-honeypot="true"])'),
      postcode: shippingAddressEl.querySelector('input[name="checkout[shipping_address][zip]"]:not([data-honeypot="true"])'),
      phone: shippingAddressEl.querySelector('input[name="checkout[shipping_address][phone]"]:not([data-honeypot="true"])')
    
  

这应该可行。

【讨论】:

天啊,它总是最简单的事情!完全错过了!谢谢!

以上是关于为啥 JS 字符限制会在 Safari 中被打破?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 tzinfo 会在 python 中打破创建纪元时间?

SVG 渲染但仅在 Firefox 中被切断 - 为啥?

为啥程序会在select中被频道阻塞?

为啥我的对象会在 C++ 中被覆盖?

为啥简单的网站会在移动设备上崩溃(至少是 iOS Safari 和 Chrome)?

为啥 localhost:5000 在 Express.js 中被拒绝?