这看起来有点像最小化代码,其中函数调用通常通过创建查找表来缩短,因此您可以在像 Element.dispatchEvent 这样的长函数调用上节省一些位,而是将其最小化为 e[l(p)]。
变量_0x76ed32 保存对输入元素的引用。
_0x76ed32['dispatchEvent'](new Event('blur'))
这是对元素的函数调用。它相当于你看到的通常的符号:
_0x76ed32.dispatchEvent(new Event('blur'))
意味着它只是调度 blur 事件。如果您不知道函数的名称并且它是在运行时决定的,那么这种编写函数调用的方法是典型的,例如
let func = 'dispatchEvent';
_0x76ed32[func](new Event('blur'))
查找“反射”以了解更多信息。
下面的代码 sn-p 就是一个很好的例子:
a0_0x3fed('0x9f')
返回一个函数名,然后插入到下面的函数调用中
$(_0x76ed32)[a0_0x3fed('0x9f')](a0_0x3fed('0x3b'), _0x5bf4db)
我假设它正在设置输入元素 _0x76ed32 的值,但是为什么要包装元素 $(_0x76ed32) 以及两个函数参数是什么,仅从这行代码中无法得知。
我认为它类似于原生的setAttribute(name,value) 调用。
最后你有以下代码sn-p:
_0x76ed32[a0_0x3fed('0xb3')](new Event('input'))
这里,a0_0x3fed('0xb3') 再次返回一个函数名。通过检查调用,很可能是dispatchEvent,然后在元素_0x76ed32 上调度input 事件。
它可能会像这样工作:
let _0x76ed32 = document.querySelector("input"),
fields = {
'0xb3': "dispatchEvent",
'0x3b': "value",
'0x9f': "setAttribute"
},
a0_0x3fed = par => fields[par],
_0x5bf4db = "new value :)";
// slightly changed the code
_0x76ed32[a0_0x3fed('0xb3')](new Event('input'));
_0x76ed32[a0_0x3fed('0x9f')](a0_0x3fed('0x3b'), _0x5bf4db);
_0x76ed32[a0_0x3fed('0xb3')](new Event('blur'));
<input type="text" value="old value!" />
最后说明:一旦您以正确的顺序发出事件,您的代码应该可以正常工作:
var elem = document.getElementById('mobile');
elem.value = '1234567890';
elem.dispatchEvent(new Event('blur', { bubbles: true }));
elem.dispatchEvent(new Event('input', { bubbles: true }));
<input id="mobile" type="text" value="123" />