小编Bha*_*ata的帖子

以编程方式生成/激活的文件输入并不总是触发`input`事件

我的Web应用程序上有一个按钮,它在click事件处理程序中包含以下代码:

const fileInputEl = document.createElement('input');
fileInputEl.type = 'file';
fileInputEl.accept = 'image/*';

fileInputEl.addEventListener('input', (e) => {
  if (!e.target.files.length) {
    return;
  }

  // Handle files here...
});  

fileInputEl.dispatchEvent(new MouseEvent('click'));
Run Code Online (Sandbox Code Playgroud)

有时(大约8分之一),在选择文件后,选择文件后input事件不会触发.我猜这是围绕元素生命周期的浏览器错误.

有什么方法可以将元素附加到页面并稍后删除它?现在在现代浏览器中处理这个问题的正确方法是什么?

我在Windows上使用Google Chrome进行测试.

JSFiddle:http: //jsfiddle.net/pja1d5om/2/

html javascript browser google-chrome blink

16
推荐指数
1
解决办法
383
查看次数

如何使用iOS WKWebView注入JavaScript回调来检测onclick事件?

我正在使用a WKWebView来显示一个包含三个按钮的HTML网站.我想在单击特定按钮时在本机应用程序中运行一些Swift代码.

关于HTML

这三个按钮看起来像这样:

<input type="button" value="Edit Info" class="button" onclick="javascript:GotoURL(1)">
<input type="button" value="Start Over" class="button" onclick="javascript:GotoURL(2)">
<input type="button" value="Submit" class="button" onclick="javascript:GotoURL(3)">
Run Code Online (Sandbox Code Playgroud)

GotoURL他们调用的函数如下所示:

function GotoURL(site)
{
    if (site == '1')
        document.myWebForm.action = 'Controller?op=editinfo';
    if (site == '2')
        document.myWebForm.action = 'Controller?op=reset';
    if (site == '3')
        document.myWebForm.action = 'Controller?op=csrupdate';
    document.myWebForm.submit();
}
Run Code Online (Sandbox Code Playgroud)

目前的WKWebView实施

当我单击webview中的任何按钮时,在我的上面调用此函数WKNavigationDelegate:

func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
    // ...?
}
Run Code Online (Sandbox Code Playgroud)

但当然,它navigation是不透明的,因此不包含用户点击的三个按钮中的哪一个的信息.

检测单击此按钮的最简单方法是什么?

我想在用户单击" 提交"时进行响应,并忽略其他按钮按下.

我在Stack Overflow上看到了其他一些方法WKUserContentController,但它们似乎要求网站调用类似的东西:

window.webkit.messageHandlers.log.postMessage("submit");
Run Code Online (Sandbox Code Playgroud)

我不控制这个网站所以我不能在它的源代码中添加这一行,我不知道使用它在正确的地方注入它的最佳方法 …

javascript ios swift wkwebview

16
推荐指数
2
解决办法
4000
查看次数

将JSON字符串定位到对象中的路径

我有一个类似于这个的JSON字符串:

{
    "Version": "XXX",
    "Statements": [
        {...},
        {...},
        {...}
    ]
}
Run Code Online (Sandbox Code Playgroud)

如何找出XX在JSON字符串的字符中定义Statements属性中的哪个对象?(考虑到那些对象可以任意深度嵌套).

例如,如果我有一个字符串

{"Version":"XXX","Statements":[{"a":1},{"b":2},{"b":3}]}
--------------------------------------------------------
123456789 123456789 123456789 123456789 123456789 123456
Run Code Online (Sandbox Code Playgroud)

然后位置上的字符36将对应于第一个语句对象,而位置上的字符52将对应于第三个语句对象.

javascript json

15
推荐指数
3
解决办法
876
查看次数

多语言弹性搜索映射设置

我有像MongoDB一样存储的文档:

const demoArticle = {
  created: new Date(),
  title: [{
    language: 'english',
    value: 'This is the english title'
  }, {
    language: 'dutch',
    value: 'Dit is de nederlandse titel'
  }]
}
Run Code Online (Sandbox Code Playgroud)

我想将分析器添加到特定语言中,通常指定如下:

"mappings": {
   "article": {
      "properties": {
         "created": {
            "type": "date"
         },
         "title.value": {
           "type": "text",
           "analyzer": "english"
         }
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

但问题是:根据子级别上设置的语言,它应该根据相同的语言设置分析器.

我偶然发现了ElasticSearch中的动态模板,但我不太相信它适用于这个用例.

有什么建议?

javascript mapper elasticsearch

14
推荐指数
1
解决办法
329
查看次数

如何在JavaScript中递归地构建菜单列表对象?

随着阵列

['/social/swipes/women', '/social/swipes/men', '/upgrade/premium'];
Run Code Online (Sandbox Code Playgroud)

我想构建一个看起来像这样的地图对象:

{
    'social': {
        swipes: {
            women: null,
            men: null
        }
    },
    'upgrade': {
        premium: null
    }
}
Run Code Online (Sandbox Code Playgroud)

const menu = ['/social/swipes/women', '/social/likes/men', '/upgrade/premium'];
const map = {};

const addLabelToMap = (root, label) => {
  if(!map[root]) map[root] = {};
  if(!map[root][label]) map[root][label] = {};
}

const buildMenuMap = menu => {
  menu
    // make a copy of menu
    // .slice returns a copy of the original array
    .slice()
    // convert the string to an array by splitting …
Run Code Online (Sandbox Code Playgroud)

javascript arrays javascript-objects ecmascript-6 arrow-functions

14
推荐指数
8
解决办法
536
查看次数

arguments.callee在es6中用于确定调用函数的替代方法

在框架中,我正在开发,我已经构建了机制,允许定义私有和受保护的属性和方法.
我在ES5规范中发现的唯一能力是使用arguments.callee,
如下所示:

descriptor.method = function () {
    if (__callerIsProptected(arguments.callee.caller.caller, cls))
        return value.apply(this, __defaults(_.values(arguments), defaults));
    throw 'Attempt to call ' + access + ' method "' + cls._name + '::' + name + '"';
};
Run Code Online (Sandbox Code Playgroud)

至于在严格模式下调用arguments.callee和arguments.caller引起异常抛出是否有任何方便的替代方法呢?

更新 - 添加整个被调用的功能代码

    function __descriptor(cls, type, name, descriptor, access) {
    //protected private non-function descriptor.value is replaced by get/set pair
    if (access !== 'public' && type == 'property') {
        delete descriptor.value;
        delete descriptor.writable;
        _.isFunction(descriptor.get) || (descriptor.get = function () {
            return this.__get(name);
        });
        _.isFunction(descriptor.set) …
Run Code Online (Sandbox Code Playgroud)

javascript arguments ecmascript-6

13
推荐指数
1
解决办法
3464
查看次数

问题:java.lang.IllegalArgumentException:与阴影元素ElementDescription对应的实际屏幕元素

我在Google Play中有一款应用.在我的上一次构建中,Google向我展示了此问题:

java.lang.IllegalArgumentException:对应于ElementDescription{className=android.support.v7.widget.AppCompatTextView, resourceName=com.myappp.testapp:id/lab_separator, contentDescription=, componentType=TEXT_VIEW, inputType=NONE, isWebViewElement=false}未找到阴影元素的实际屏幕元素.

我无法在应用中解决此问题.报告中提到的视图可以正常工作.一切都按预期工作,但我想修复谷歌报道的内容.

android google-play

13
推荐指数
1
解决办法
300
查看次数

哪个JavaScript库可以使用贝塞尔曲线进行布尔运算?

是否存在可以对路径执行布尔运算的Javascript库(贝塞尔曲线)?

我知道Paper.js和Raphael.js,但现在都无法执行这些操作.

javascript svg bezier boolean-operations html5-canvas

12
推荐指数
3
解决办法
3213
查看次数

如何在 Javascript 中将 jsPDF 中的 PDF 文件保存在服务器上?

var doc = new jsPDF();
$('#generatereport').click(function() {
   doc.fromHTML($('#lppresults')[0], 15, 15, {
	  width: 170
   }, function() {
	  doc.save('sample-file.pdf');
   });
});
 
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
        
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.4/jspdf.min.js"></script>
<div class="survey-results" id="lppresults">
    <button id="generatereport">Download Report</button>
    <h1 style="border: solid;">TEST CONTENT</h1><br />
    <h1 style="border: solid;">TEST CONTENT1</h1>
</div>
        
          
Run Code Online (Sandbox Code Playgroud)

我想用 JavaScript 将文件保存在服务器上,但目前我只能将此文件保存在用户的计算机上。

javascript php jspdf

11
推荐指数
1
解决办法
2万
查看次数

如何在 HTML5 GeoLocation API 中使用异步等待?

第一个方法返回承诺。

getCoordinates() {
  return new Promise(function(resolve, reject) {
    navigator.geolocation.getCurrentPosition(resolve, reject);
  });
}
Run Code Online (Sandbox Code Playgroud)

返回reverseGeoCode方法的结果。

async getAddress() {
  await this.getCoordinates().then(position => {
    let latitude = position.coords.latitude;
    let longitude = position.coords.longitude;
    let url = Constants.OSMAP_URL + latitude + "&lon=" + longitude;
    // Reverse geocoding using OpenStreetMap
    return this.reverseGeoCode(url);
  });
}
Run Code Online (Sandbox Code Playgroud)

使用自定义类进行 API 调用并返回结果。

reverseGeoCode(url) {
  let requestService = new RequestService("json", url);
  requestService.call().then(result => {
    return result;
  });
}
Run Code Online (Sandbox Code Playgroud)

我是这样称呼的:

let geoLocation = new GeoLocation();
geoLocation.getAddress().then(r => {
  console.log(r);
});
Run Code Online (Sandbox Code Playgroud)

控制台日志未定义。

javascript asynchronous promise w3c-geolocation

10
推荐指数
2
解决办法
9323
查看次数