javascript

java

python

c#

android

node.js

c++

reactjs

php

html

jquery

css

.net

ios

git

ruby-on-rails

sql

c

string

ruby

使用字符串调用JavaScript函数名称?

如何将事件连接到已定义为字符串的函数名称?

我正在使用Prototype.js,尽管这不是特定于Prototype的。

$(inputId).observe('click', formData.fields[x].onclick);

这将导致JavaScript抱怨我的处理程序不是函数。 我希望我们不要使用eval()

trans by 2020-02-29T15:14:58Z

javascript-更新redux中的嵌套数据

使用Redux更新商店中嵌套数据数组的最佳/正确方法是什么?

我的商店看起来像这样:

{
    items:{
        1: {
            id: 1,
            key: "value",
            links: [
                {
                    id: 10001
                    data: "some more stuff"
                },
                ...
            ]
        },
        ...
    }
}

我有一对异步操作来更新完整的items对象,但是我还有另一对操作要更新特定的links数组。

我的减速器当前看起来像这样,但是我不确定这是否是正确的方法:

  switch (action.type) {
    case RESOURCE_TYPE_LINK_ADD_SUCCESS:
      // TODO: check whether the following is acceptable or should we create a new one?
      state.items[action.resourceTypeId].isSourceOf.push(action.resourceTypeLink);
      return Object.assign({}, state, {
        items: state.items,
      });
  }
trans by 2020-02-29T15:12:13Z

在JavaScript中打破NaN

是否有任何现代浏览器会引起NaN传播异常(即,对NaN乘以或加一个数字),或者可以对其进行配置?

静默的NaN传播是错误的可怕且阴险的来源,我希望能够及早发现它们,即使性能受到影响。


这是use strictjshint等的示例错误。 不会接:

object = new MyObject();
object.position.x = 0;
object.position.y = 10;

// ... lots of code

var newPosition = object.position + 1; // <- this is an error, and should
                                       //    have been object.position.x
                                       //    however it fails *silently*,
                                       //    rather than loudly

newPosition *= 2;                      // <- this doesn't raise any errors either.
                                       //    this code is actually ok if the
                                       //    previous line had been correct
trans by 2020-02-29T12:21:31Z

javascript-输入tex内的图像

如何创建自定义输入文本元素,以将图像与文本结合在一起?

基本上,这些图像是从CDN加载的图释。

澄清:
我希望实现的是<input type="text" />元素,该元素可能包含图像作为输入的一部分。

trans by 2020-02-29T11:56:07Z

javascript-如何在jquery ajax成功回调函数中传递上下文

var Box = function(){
    this.parm = {name:"rajakvk",year:2010};
    Box.prototype.jspCall = function() {
        $.ajax({
            type: "post",
            url: "some url",
            success: this.exeSuccess,
            error: this.exeError,
            complete: this.exeComplete
        });
    }
    this.exeSuccess = function(){
        alert(this.parm.name);
    }
}

我没有在exeSuccess方法中获取Box对象。 如何在exeSuccess方法内传递Box对象?

trans by 2020-02-29T11:44:31Z

在JavaScript中,在循环内使用await是否会阻塞循环?

请执行以下循环:

for(var i=0; i<100; ++i){
    let result = await some_slow_async_function();
    do_something_with_result();
}
  1. do_something_with_result()是否会阻塞环路? 还是iawaiting期间继续增加?

  2. do_something_with_result()的顺序是否相对于i保证顺序? 还是取决于每个27688571217720122012的awaited函数有多快?

trans by 2020-02-29T11:07:39Z

javascript-Chrome应用程序Webview和触摸滚动传播

我很高兴将Windows 8 Metro应用程序替换为Chrome打包的应用程序。 目前,它需要模仿Metro应用的外观。 主页包含水平排列的多个Web视图,并可能进行大量的水平滚动。 尝试使用触摸设备水平滚动时遇到问题。 如果滚动手势在Web视图上开始,则表示正在捕获滚动事件并阻止主机滚动。 溢出在所有Web视图上均被隐藏。 由于它们构成了页面上大部分内容,因此主机的有效滚动目标受到限制。

Webview的内容是交互式的,因此我无法在可滚动内容上放置透明的覆盖层来捕获事件,至少没有某种方法可以将点击/触摸传播到WebView本身。

关于如何实现的任何想法?

谢谢你的帮助!

trans by 2020-02-29T10:29:04Z

javascript-为什么node.js是异步的?

实际上,没有人问过这个问题(从我得到的所有“建议”以及在我问这里之前的搜索中)。

那么为什么node.js是异步的呢?

经过一些研究,我得出的结论是:

诸如PHP和Python之类的语言是脚本语言(对于脚本语言而言,我可能是错的),而JavaScript并非如此。 (我想这是因为JS无法编译的事实?)

Node.js在单个线程上运行,而脚本语言使用多个线程。

异步意味着无状态,并且连接是持久的,而同步是(几乎)相反的。

也许答案在上面提到的某个地方,但是我仍然不确定。

我与此主题相关的第二个也是最后一个问题是:

可以将JavaScript制成同步语言吗?

PS。 我知道有些人会问“为什么要使JS同步?” 在您的回答中,但事实是我没有。 我只是问这些类型的问题,因为我敢肯定有更多的人在思考这样的问题,而不仅仅是我自己。

trans by 2020-02-29T08:48:33Z

javascript-浏览器大小(宽度和高度)

我正在尝试检测浏览器的当前大小(宽度和高度)。 我知道在带有$(document).width and $(document).height264的jQuery中超级容易,但是我不想将jQuery库的大小添加到项目中,因此我只想使用内置的JavaScript。 用JavaScript做同样的事情的快捷简便的方法是什么?

trans by 2020-02-23T03:28:30Z

javascript-Travis / Jest:TypeError:无法分配为对象'#<process>'的只读属性'Symbol(Symbol.toStringTag)'

我的所有jest typescript测试都在我的travis管道中失败,并抛出以下错误:

TypeError: Cannot assign to read only property 'Symbol(Symbol.toStringTag)' of object '#<process>'

突然发生了,我没有更改代码中的任何特定内容。 在本地,一切正常。

任何想法可能会发生什么?

trans by 2020-02-23T02:38:05Z

javascript-最简单的骨干.js示例

我正在创建一个简单的骨架示例来尝试学习它,并且在使我的视图呈现时遇到问题。 我以Thomas Davis的教程为基础,但查看了许多其他可用的应用程序和教程。

我要更改Davis的教程,不仅因为我想添加输入框,而且因为基于主干文档,我认为它需要的代码更少,结构也有所不同。 显然,因为我无法使它正常工作,所以我不知道需要什么,不需要什么。

我的最终目标是在ul#friends-list内的li标签中添加名称,尽管我认为el: 'body'不会对我有所帮助。

我究竟做错了什么? 谢谢你的帮助。

我的html:

<!DOCTYPE HTML>
<html>
<head>
<title>Tut</title>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
<script type="text/javascript" src="http://ajax.cdnjs.com/ajax/libs/underscore.js/1.1.4/underscore-min.js"></script>
<script type="text/javascript" src="http://ajax.cdnjs.com/ajax/libs/backbone.js/0.3.3/backbone-min.js"></script>
</head>
<body>

<input type="text" placeholder="Enter friend's name" id="input" />
<button id="add-input">Add Friend</button>

<ul id="friends-list">
</ul>
<script type="text/javascript" src="test.js"></script>
</body>
</html>

我的test.js

$(function() {

Friend = Backbone.Model.extend();
//Create my model

var friends = new Friend([ {name: 'Eddard Stark'}, {name: 'Robert Baratheon'} ]);
//Create new models to be used as examples


FriendList = Backbone.Collection.extend({
    model: Friend
});
//Create my collection

var friendslist = new FriendList;
//Created to hold my friends model


FriendView = Backbone.View.extend({

    tagName: 'li',

    events: {
        'click #add-input':  'getFriend',
    },

    initialize: function() {
        _.bindAll(this, 'render');
    }, 

    getFriend: function() {
        var friend_name = $('#input').val();
        var friend_model = new Friend({name: friend_name});
    },

    render: function() {
        console.log('rendered')
    },

});

var view = new FriendView({el: 'body'});
});
trans by 2020-02-23T02:36:01Z

单元测试-如何使用Mocha测试“正常”(非特定于节点的)JavaScript函数?

这看起来应该非常简单; 但是,经过两个小时的阅读和反复试验却没有成功,我承认失败并问你们!

我正在尝试将Mocha与Should.js结合使用以测试一些JavaScript函数,但是我遇到了范围界定问题。 我已经将其简化为最基本的测试用例,但是我无法使其正常工作。

我有一个名为global的文件,其中仅包含以下内容:

function testFunction() {
    return 1;
}

和我的global(位于同一文件夹中)内容:

require('./functions.js')

describe('tests', function(){
    describe('testFunction', function(){
        it('should return 1', function(){
            testFunction().should.equal(1);
        })
    })
})

该测试失败,并显示global

我能看到原因,因为我发现的大多数示例都将对象和函数附加到Node global对象或使用module.exports导出它们,但是使用这两种方法都意味着我的函数代码会在标准浏览器情况下抛出错误,在这种情况下 这些对象不存在。

那么,如何不使用特定于节点的语法访问与测试分开的脚本文件中声明的独立函数?

trans by 2020-02-23T01:11:15Z

jQuery-是否有用于制作vh和vw单元的跨浏览器JavaScript

注意:好的,当我输入这个问题时,我遇到了这个问题   建议使用vh的问题,但在   2011 ...

如您所知,CSS3引入了新的Viewport-percentage长度单位vh和275954850253452121857,我认为它们对于可靠的响应式布局确实很有用,所以我的问题是,对此是否有JavaScript / jQuery替代品? 除了将其用于字体大小之外,是否可以安全地用于元素大小调整? 像例子

div {
   height: 6vh;
   width: 20vh;  /* Note am using vh for both, do I need to use vw for width here? */
}
trans by 2020-02-23T01:00:18Z

sham vs.sham:有什么区别?

shim和sham之间有什么区别?

包含es5-shim.min.js和es6-shim.min.js是否足够?或者我也应该包含es5-sham.min.js和es6-sham.min.js?

trans by 2020-02-23T00:58:18Z

javascript-在iOS8中使用.focus()会在触摸后显示虚拟键盘并滚动页面

在iOS8之前,在输入元素上使用Javascript .focus()方法似乎无效(虚拟键盘将不会显示)。 在最新的iOS 8版本之后,运行navigator.userAgent方法似乎对页面加载没有影响,但是一旦用户触摸屏幕上的任意位置,虚拟键盘就会立即出现并将页面滚动到焦点所在的元素。 (当我使用HTML属性“自动对焦”时,这也是一个问题)

此更改导致我的网站上的iOS8用户出现问题。 当用户尝试单击我页面上的按钮时,突然的滚动和键盘外观使他们无意中单击了屏幕下方的按钮。

我假设这是iOS8中的错误,而不是有意的功能,我的问题是解决此问题的最有效解决方案是什么?

每次我使用.focus()方法时,是否必须检查navigator.userAgent以查看设备是否为iOS8?

trans by 2020-02-22T21:09:39Z

javascript-使用CSS变换的jQuery拖动/调整大小

我正在应用CSS转换(以及特定于浏览器的-webkit,-o等):

变换:matrix(0.5,0,0,0.5,0,0);

到div,然后在该div的子级上使用jQuery的draggable()和resizable()插件。

我遇到的问题是,当拖动或调整子元素的大小时,jQuery所做的更改与鼠标“同步”的程度等于应用的缩放比例。

我找到了一个关于stackoverflow的解决方案(尽管我愚蠢地没有将其添加为书签,现在却找不到它。。。)建议修补插件,并且效果很好。 它遵循以下原则:

function monkeyPatch_mouseStart() {
  // don't really need this, but in case I did, I could store it and chain
  // var oldFn = $.ui.draggable.prototype._mouseStart ;
  $.ui.draggable.prototype._mouseStart = function(event) {

    var o = this.options;

    //Create and append the visible helper
    this.helper = this._createHelper(event);

    //Cache the helper size
    this._cacheHelperProportions();

    //If ddmanager is used for droppables, set the global draggable
    if($.ui.ddmanager)
      $.ui.ddmanager.current = this;

    /*
     * - Position generation -
     * This block generates everything position related - it's the core of draggables.
     */

    //Cache the margins of the original element
    this._cacheMargins();

    //Store the helper's css position
    this.cssPosition = this.helper.css("position");
    this.scrollParent = this.helper.scrollParent();

    //The element's absolute position on the page minus margins

    //PATCH CODE
    this.offset = this.positionAbs = getViewOffset(this.element[0]);
    //END

    this.offset = {
      top: this.offset.top - this.margins.top,
      left: this.offset.left - this.margins.left
    };

    $.extend(this.offset, {
      click: { //Where the click happened, relative to the element
        left: event.pageX - this.offset.left,
        top: event.pageY - this.offset.top
      },
      parent: this._getParentOffset(),
      relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
    });

    //Generate the original position
    this.originalPosition = this.position = this._generatePosition(event);
    this.originalPageX = event.pageX;
    this.originalPageY = event.pageY;

    //Adjust the mouse offset relative to the helper if 'cursorAt' is supplied
    if(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt)){
    }

    //Set a containment if given in the options
    if(o.containment)
      this._setContainment();

    //Trigger event + callbacks
    if(this._trigger("start", event) === false) {
      this._clear();
      return false;
    }

    //Recache the helper size
    this._cacheHelperProportions();

    //Prepare the droppable offsets
    if ($.ui.ddmanager && !o.dropBehaviour)
      $.ui.ddmanager.prepareOffsets(this, event);

    this.helper.addClass("ui-draggable-dragging");
    this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position

    //If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003)
    if ( $.ui.ddmanager && $.ui.ddmanager.dragStart) $.ui.ddmanager.dragStart(this, event);

    return true;
  }
 }

function getViewOffset(node) {
  var x = 0, y = 0, win = node.ownerDocument.defaultView || window;
  if (node) addOffset(node);
  return { left: x, top: y };

  function getStyle(node) {
    return node.currentStyle || // IE
           win.getComputedStyle(node, '');
  }

  function addOffset(node) {
    var p = node.offsetParent, style, X, Y;
    x += parseInt(node.offsetLeft, 10) || 0;
    y += parseInt(node.offsetTop, 10) || 0;

    if (p) {
      x -= parseInt(p.scrollLeft, 10) || 0;
      y -= parseInt(p.scrollTop, 10) || 0;

      if (p.nodeType == 1) {
        var parentStyle = getStyle(p)
          , localName   = p.localName
          , parent      = node.parentNode;
        if (parentStyle.position != 'static') {
          x += parseInt(parentStyle.borderLeftWidth, 10) || 0;
          y += parseInt(parentStyle.borderTopWidth, 10) || 0;

          if (localName == 'TABLE') {
            x += parseInt(parentStyle.paddingLeft, 10) || 0;
            y += parseInt(parentStyle.paddingTop, 10) || 0;
          }
          else if (localName == 'BODY') {
            style = getStyle(node);
            x += parseInt(style.marginLeft, 10) || 0;
            y += parseInt(style.marginTop, 10) || 0;
          }
        }
        else if (localName == 'BODY') {
          x += parseInt(parentStyle.borderLeftWidth, 10) || 0;
          y += parseInt(parentStyle.borderTopWidth, 10) || 0;
        }

        while (p != parent) {
          x -= parseInt(parent.scrollLeft, 10) || 0;
          y -= parseInt(parent.scrollTop, 10) || 0;
          parent = parent.parentNode;
        }
        addOffset(p);
      }
    }
    else {
      if (node.localName == 'BODY') {
        style = getStyle(node);
        x += parseInt(style.borderLeftWidth, 10) || 0;
        y += parseInt(style.borderTopWidth, 10) || 0;

        var htmlStyle = getStyle(node.parentNode);
        x -= parseInt(htmlStyle.paddingLeft, 10) || 0;
        y -= parseInt(htmlStyle.paddingTop, 10) || 0;
      }

      if ((X = node.scrollLeft)) x += parseInt(X, 10) || 0;
      if ((Y = node.scrollTop))  y += parseInt(Y, 10) || 0;
    }
  }
}
var isNumber = function(value) {
  return !isNaN(parseInt(value, 10));
};

我已经做出了自己的更改,例如(您可以在6-7行上看到运动乘以“比例因子”):

 $.ui.draggable.prototype._generatePosition = function(event) {
    var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
    var pageX = event.pageX;
    var pageY = event.pageY;
    //PATCH CODE
    if($(this.element[0]).hasClass('item')){
        pageY = this.originalPageY + ((pageY - this.originalPageY)*(1/$.viewbox.foreground.scale));
        pageX = this.originalPageX + ((pageX - this.originalPageX)*(1/$.viewbox.foreground.scale));
    }
    //END
    /*
     * - Position constraining -
     * Constrain the position to a mix of grid, containment.
     */

    if(this.originalPosition) { //If we are not dragging yet, we won't check for options

      if(this.containment) {
        if(event.pageX - this.offset.click.left < this.containment[0]) pageX = this.containment[0] + this.offset.click.left;
        if(event.pageY - this.offset.click.top < this.containment[1]) pageY = this.containment[1] + this.offset.click.top;
        if(event.pageX - this.offset.click.left > this.containment[2]) pageX = this.containment[2] + this.offset.click.left;
        if(event.pageY - this.offset.click.top > this.containment[3]) pageY = this.containment[3] + this.offset.click.top;
      }

      if(o.grid) {
        var top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1];
        pageY = this.containment ? (!(top - this.offset.click.top < this.containment[1] || top - this.offset.click.top > this.containment[3]) ? top : (!(top - this.offset.click.top < this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;

        var left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0];
        pageX = this.containment ? (!(left - this.offset.click.left < this.containment[0] || left - this.offset.click.left > this.containment[2]) ? left : (!(left - this.offset.click.left < this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
      }
    }
    return {
      top: (
        pageY                               // The absolute mouse position
        - this.offset.click.top                         // Click offset (relative to the element)
        - this.offset.relative.top                        // Only for relative positioned nodes: Relative offset from element to offset parent
        - this.offset.parent.top                        // The offsetParent's offset without borders (offset + border)
        + ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
      ),
      left: (
        pageX                               // The absolute mouse position
        - this.offset.click.left                        // Click offset (relative to the element)
        - this.offset.relative.left                       // Only for relative positioned nodes: Relative offset from element to offset parent
        - this.offset.parent.left                       // The offsetParent's offset without borders (offset + border)
        + ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
      )
    };

  }

非常感谢任何建议的人。

所以,我的问题! 有没有人遇到过一种很好的方式来在不需要修补jQuery的可缩放元素内具有可拖动/可调整大小的事件? 我已经用谷歌搜索,这是我能找到的最好的解决方案。 有谁知道用CSS转换替代在这种情况下可以工作的jquery?

非常感谢您的任何答复。

trans by 2020-02-22T20:59:22Z

javascript-document.URL和location.h之间的区别

我知道无法设置document.URL,而可以设置location.href

但该文件指出:

URL替代了DOM Level 0 document.URL属性。

那么我们什么时候使用document.URL

trans by 2020-02-22T20:56:29Z

javascript-在可编辑内容的光标处插入文本

我有一个contenteditable div,需要在插入符号的位置插入文本,

通过 document.selection.createRange().text = "banana" 在IE中可以轻松完成此操作

在Firefox / Chrome中有类似的实现方式吗?

(我知道这里有一个解决方案,但是不能在contenteditable div中使用,而且看起来很笨拙)

谢谢!

trans by 2020-02-22T19:45:50Z

javascript-将Function.prototype.bind与参数数组一起使用?

与硬编码参数相反,如何使用参数数组调用Function.prototype.bind? (不使用ECMA6,因此没有传播算子)。

我正在尝试在使用回调的模块周围放置一个promises包装器,并且我想将传入的所有参数绑定到我的包装器方法中并对其进行绑定。 然后,我想用自己的回调函数调用部分应用的绑定函数,这将解决或拒绝一个Promise。

var find = function() {
  var deferred, bound;
  deferred = Q.defer();
  bound = db.find.bind(null, arguments);
  bound(function(err, docs) {
    if(err) {
      deferred.fail(err);
    } else {
      deferred.resolve(docs);
    }
  });
  return deferred.promise;
}

但是显然这是行不通的,因为bind需要参数而不是参数数组。 我知道我可以通过在参数数组的末尾插入回调并使用apply来做到这一点:

arguments[arguments.length] = function(err, docs) { ... }
db.find.apply(null, arguments);

或者通过遍历arguments数组并为每个参数重新绑定函数:

var bound, context;
for(var i = 0; i < arguments.length; i++) {
   context = bound ? bound : db.find;
   bound = context.bind(null, arguments[i]);
}
bound(function(err, docs) { ... })

但是这两种方法都很脏。 有任何想法吗?

trans by 2020-02-22T19:09:18Z

javascript-如何使用无效变量名的键名来分解对象属性?

由于对象键是字符串,因此它们可以包含任何种类的字符和特殊字符。 我最近偶然发现了我从API调用中收到的对象。 该对象的键名中带有“-”。

const object = {
   "key-with-dash": []
}

在这种情况下,无法进行解构,因为key-with-dash不是有效的变量名。

const { key-with-dash } = object;

所以我想到一个问题。 在这种情况下,我应该如何分解对象? 甚至有可能吗?

trans by 2020-02-22T19:04:54Z

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 下一页 共450页