小编Rob*_*ert的帖子

有没有办法确定<select>下拉菜单是否打开?

我正在寻找一种方法来确定<select>元素的菜单是否/何时打开.我不需要强制它打开或关闭,只需弄清楚它是否在给定时间打开或关闭.

我可以收听焦点/模糊,鼠标/模拟等事件,但我认为我不能可靠地从这些事件中找出菜单的状态.例如,鼠标按下之后鼠标松开可能意味着用户点击并拖动到一个选择和释放(在这种情况下,菜单现在是封闭的),或者点击并释放到打开菜单(在这种情况下,菜单是打开的).下拉菜单的特定行为似乎也与浏览器有关.

如果我滚动自己的下拉菜单,我知道我可以这样做,但我更喜欢使用<select>.

有没有可靠的方法来确定下拉菜单是否打开?或者这是Javascript无法知道的东西?

结论:似乎没有任何保证的方法来确定选择菜单是否打开,无论是通过询问对象还是通过侦听它触发的事件.

对于我自己的使用,我只是跟踪选择是否具有使用onfocusonblur的焦点.我假设菜单无法在没有焦点的情况下打开,这似乎在我测试的所有浏览器中都适用.它实际上并没有告诉我菜单何时打开,但它告诉我何时无法打开,这对我的目的来说已经足够了.

javascript dom menu popup drop-down-menu

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

在jQuery的ajax成功回调中,textStatus会不会"成功"?

文档中有一个可能的值列表,如果error()回调触发("超时","错误","未修改"和"parsererror"),textStatus可能是值,但没有为success()事件指定任何值.

除了"成功"之外还有其他值可以传递给success()回调吗?这记录在哪里?

ajax jquery callback

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

如何在不阻塞主线程的情况下添加SCNNode?

我正在创建并向SceneKit场景添加大量SCNNode,这会导致应用程序冻结一两秒钟.

我以为我可以通过将所有操作放在后台线程中来解决这个问题DispatchQueue.global(qos: .background).async(),但是没有骰子.它的行为完全相同.

我看到了这个答案SCNView.prepare()在添加节点之前完成了节点,希望它会减慢后台线程并防止阻塞.它没有.

这是一个重现问题的测试函数:

func spawnNodesInBackground() {
    // put all the action in a background thread
    DispatchQueue.global(qos: .background).async {
        var nodes = [SCNNode]()
        for i in 0...5000 {
            // create a simple SCNNode
            let node = SCNNode()
            node.position = SCNVector3(i, i, i)
            let geometry = SCNSphere(radius: 1)
            geometry.firstMaterial?.diffuse.contents = UIColor.white.cgColor
            node.geometry = geometry
            nodes.append(node)
        }
        // run the nodes through prepare()
        self.mySCNView.prepare(nodes, completionHandler: { (Bool) in
            // nodes are prepared, add them to …
Run Code Online (Sandbox Code Playgroud)

multithreading ios scenekit swift swift3

10
推荐指数
1
解决办法
2952
查看次数

如何在Swift的JavaScriptCore中导入模块?

我正在尝试使用Swift的JavaScriptCore框架来利用使用ES6模块的现有JavaScript库.特别是斯蒂芬·C·菲利普斯的莫尔斯职业选手.我已将文件添加到Xcode游乐场,然后使用此代码加载库并在JavaScript上下文中运行它:

import JavaScriptCore
var jsContext = JSContext()
// set up exception handler for javascript errors
jsContext?.exceptionHandler = { context, exception in
    if let exc = exception {
        print("JS Exception:", exc.toString())
    }
}
// read the javascript files in and evaluate
if let jsSourcePath = Bundle.main.path(forResource: "morse-pro-master/src/morse-pro-message", ofType: "js") {
    do {
        let jsSourceContents = try String(contentsOfFile: jsSourcePath)
        jsContext?.evaluateScript(jsSourceContents)
    } catch {
        print(error.localizedDescription)
    }
}
Run Code Online (Sandbox Code Playgroud)

这种方法适用于简单的"Hello world"类测试,但是它在morse-pro库中遇到了这个JavaScript错误:

SyntaxError:意外的标记'*'.import call只需要一个参数.

该错误似乎是由morse-pro-message.js中的这一行引起的:

import * as Morse from './morse-pro';
Run Code Online (Sandbox Code Playgroud)

我相信它试图将所有morse-pro文件作为模块导入.

我不熟悉ES6模块,但该库似乎适用于普通JavaScript环境中的其他人.我在Swift中加载库的方式有问题吗?或者模块是JavaScriptCore不支持的功能吗?(文档 …

javascript ios javascriptcore ecmascript-6 swift

9
推荐指数
2
解决办法
2148
查看次数

如何将多个表的结果与不同的列组合在一起?

我有几个表有不同数量和类型的列,以及一个共同的列.

+--------+---------+------------+-------------+
| person | beardID | beardStyle | beardLength |
+--------+---------+------------+-------------+

+--------+-------------+----------------+
| person | moustacheID | moustacheStyle |
+--------+-------------+----------------+
Run Code Online (Sandbox Code Playgroud)

我想获取与共享列的给定值匹配的所有结果.我可以使用这样的多个select语句来做到这一点:

SELECT * FROM beards WHERE person = "bob"
Run Code Online (Sandbox Code Playgroud)

SELECT * FROM moustaches WHERE person = "bob"
Run Code Online (Sandbox Code Playgroud)

但这需要多个mysql API调用,这似乎效率低下.我希望我可以使用UNION ALL在单个API调用中获取所有结果,但UNION要求表具有相同数量和相似类型的列.我可以编写一个SELECT语句,通过添加具有NULL值的列来手动填充每个表的结果,但是对于具有更多列的更多表,这将很快变得无法管理.

我正在寻找一个大致如下的结果集:

+--------+---------+------------+-------------+-------------+----------------+
| person | beardID | beardStyle | beardLength | moustacheID | moustacheStyle |
+--------+---------+------------+-------------+-------------+----------------+
| bob    | 1       | rasputin   | 1           |             |                |
+--------+---------+------------+-------------+-------------+----------------+
| bob    | 2       | samson     | 12          |             | …
Run Code Online (Sandbox Code Playgroud)

php mysql union join

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

有没有理由使用TINYTEXT?

据我所知,VARCHAR(255)一切都TINYTEXT可以做到.VARCHAR具有相同的存储大小,它是ISO标准的一部分,它允许除null之外的默认值.我看不出任何使用理由TINYTEXT.但它存在,所以也许是有原因的.

是否存在TINYTEXT大小,速度或其他考虑因素的首选数据类型?

mysql database varchar tinytext sqldatatypes

6
推荐指数
1
解决办法
1296
查看次数

Liquid:如何将运算符的输出分配给变量?

我正在使用 Shopify 的 Liquid 模板。我希望某些元素仅在该月份恰好是 12 月时才显示。由于有多个元素需要这个,所以我想在文档顶部设置一个变量并稍后引用它。这是我所得到的有效的:

<!-- At the top of the page -->
{% assign month = 'now' | date: "%m" %}
{% if month == "12" %}
{% assign isDecember = true %}
{% else %}
{% assign isDecember = false %}
{% endif %}

<!-- Only show in December -->
{% if isDecember %}
Happy Holidays
{% endif %}
Run Code Online (Sandbox Code Playgroud)

这可行(为了测试,我将“12”更改为当前月份),但它非常难看。在大多数语言中我会这样做:

{% assign isDecember = (month == "12") %}
Run Code Online (Sandbox Code Playgroud)

Liquid 不接受括号,所以显然这是行不通的。没有括号它也不起作用。该文档提供了使用运算符和为变量分配静态值的示例,但没有介绍如何将两者结合起来。

我可以将过滤器的输出分配| …

operators variable-assignment liquid assignment-operator assign

6
推荐指数
1
解决办法
7597
查看次数

是否有通过匹配多个条件进行排序的SQL技术?

我有几个表连接在一起形成一个包含列的表

designID
garmentID
colorID
sizeID
imageID
Run Code Online (Sandbox Code Playgroud)

我有一个看起来像这样的函数[方括号中的变量是可选的]:

getProductImages($designID, [$garmentID], [$colorID], [$sizeID]);
Run Code Online (Sandbox Code Playgroud)

我希望它按以下顺序返回所有匹配$ designID的imageID:

  • 首先匹配$ garmentID,$ colorID和$ sizeID的行
  • 接下来与$ garmentID和$ colorID匹配的行
  • 接下来只匹配$ garmentID的行
  • 最后匹配none(仅$ designID)的行

我只需加载与$ designID匹配的所有行,然后在PHP中对它们进行排序,就可以很容易地做到这一点,但我的理解是,在可能的情况下,在MySQL中进行排序通常会更快.将有大约20行匹配给定的$ designID.

所以我的问题是双重的:是否值得在SQL语句中进行排序?如果我这样做,最好的方法是什么?

我也很想知道这种排序是否有名称.

php mysql sql sorting

5
推荐指数
1
解决办法
2520
查看次数

为什么 SceneKit 的物理世界 didBeginContact 在一次碰撞中会多次触发?

我使用 SceneKit 的物理主体系统来检测对象之间的碰撞,并得到一些非常奇怪的结果。为了说明这一点,我有一个最小的示例,它生成两个具有运动物理体的球体,并将它们沿直线移动,以便它们短暂重叠。

我希望看到当球体第一次重叠时,physicalWorld(:didBeginContact:) 被调用一次,而当球体停止重叠时,physicalWorld(:didEndContact:) 被调用一次。相反,我看到每个函数被调用了 25 次!

以下是要重现的代码:在 Xcode 8.0 中,使用“Game”模板创建一个全新的项目。将 GameViewController.swift 的内容替换为:

import UIKit
import SceneKit

class GameViewController: UIViewController, SCNSceneRendererDelegate, SCNPhysicsContactDelegate {

    var scnScene: SCNScene!
    var scnView: SCNView!
    var cameraNode: SCNNode!

    var nodeA: SCNNode!
    var nodeB: SCNNode!

    var countBeginnings: Int = 0
    var countEndings: Int = 0

    override func viewDidLoad() {
        super.viewDidLoad()

        setupScene()
        setupNodes()
    }

    func setupScene() {
        // create a new SCNScene and feed it to the view
        scnView = self.view as! SCNView
        scnScene = SCNScene()
        scnView.scene …
Run Code Online (Sandbox Code Playgroud)

scenekit skphysicsworld swift

5
推荐指数
1
解决办法
1673
查看次数

为什么我的 Apple Watch 并发症不显示任何内容?

我使用 Xcode 的“iOS App with Watchkit App”模板创建了一个应用程序,进入TARGETS并检查了Complications Configuration > Supported Families > Graphic Corner. 我ComplicationController.swift在扩展中打开并修改了getCurrentTimelineEntry()

func getCurrentTimelineEntry(for complication: CLKComplication, withHandler handler: @escaping (CLKComplicationTimelineEntry?) -> Void) {
    let cornerTemplate = CLKComplicationTemplateGraphicCornerStackText()
    cornerTemplate.outerTextProvider = CLKSimpleTextProvider(text: "Outer")
    cornerTemplate.innerTextProvider = CLKSimpleTextProvider(text: "Inner")
    let entry = CLKComplicationTimelineEntry(date: Date(), complicationTemplate: cornerTemplate)
    handler(entry)
}
Run Code Online (Sandbox Code Playgroud)

我还修改了 getLocalizableSampleTemplate() 以提供示例,但这也不起作用:

func getLocalizableSampleTemplate(for complication: CLKComplication, withHandler handler: @escaping (CLKComplicationTemplate?) -> Void) {
    let cornerTemplate = CLKComplicationTemplateGraphicCornerStackText()
    cornerTemplate.outerTextProvider = CLKSimpleTextProvider(text: "Outer")
    cornerTemplate.innerTextProvider = CLKSimpleTextProvider(text: …
Run Code Online (Sandbox Code Playgroud)

ios swift watchos apple-watch-complication watchos-simulator

5
推荐指数
1
解决办法
1231
查看次数