小编Eli*_*gem的帖子

JavaScript:如何模拟Internet Explorer中的更改事件(委派)

更新:( 回顾,小提琴和赏金)

这个问题并没有得到太多的关注,所以我要花一些代表.我知道我的答案和问题往往过于冗长.这就是为什么我继续设置这个小提琴,在我看来,这是我目前不得不用来接近冒泡change事件的代码.我正试图解决的几个问题:

  1. pseudo-change事件不会触发一个select元素,除非它失去焦点.在某些情况下,应在选择新值时重定向客户端.我该如何实现这一目标?
  2. 单击标签时调用处理程序,以及复选框本身.这本身就是你所期望的,但是由于事件冒泡它(AFAIK)无法确定点击了哪个元素.IE的事件对象没有realTarget属性.
  3. checked通过单击标签在IE中更改复选框的-state时,一切都很好(虽然它需要一些讨厌的解决方法),但是当直接单击复选框时,会调用处理程序,但是检查状态保持不变,直到我单击一个第二次.然后值会更改,但不会调用处理程序.
  4. 当我切换到另一个选项卡,然后再次返回时,会多次调用该处理程序.如果检查状态实际发生了变化,则三次,如果我直接单击一次,则两次.

任何可以帮助我解决上述一个或多个问题的信息将不胜感激.拜托,我没有忘记添加一个jQuery标签,我喜欢纯JS,所以我正在寻找一个纯粹的JS答案.


我有一个网页上有超过250个选择元素,以及20~30个复选框.我还必须跟踪用户的操作,并采取适当的措施.因此,我很自然地委派变更事件,而不是添加数百个听众,恕我直言.

当然,IE -company策略:IE8必须得到支持 - 在我需要时不会触发onchange事件.所以我想假装一个onchange事件.到目前为止,我所做的工作相当不错,除了一件真正让我烦恼的事情.
我正在使用onfocusinonfocusout注册活动.在某些情况下,当用户从select元素中选择一个新值时,脚本应立即响应.但是,只要选择没有失去焦点,就不会发生这种情况.

这是我到目前为止所提出的:

i = document.getElementById('content');
if (!i.addEventListener)
{
    i.attachEvent('onfocusin',(function(self)
    {
        return function(e)
        {
            e = e || window.event;
            var target = e.target || e.srcElement;
            switch (target.tagName.toLowerCase())
            {
                case 'input':
                    if (target.getAttribute('type') !== 'checkbox')
                    {
                        return true;
                    }
                    return changeDelegator.apply(self,[e]);//(as is
                case 'select':
                    self.attachEvent('onfocusout',(function(self,current)
                    {
                        return function(e)
                        {
                            e = e || window.event; …
Run Code Online (Sandbox Code Playgroud)

javascript internet-explorer javascript-events event-delegation

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

如何将Web表单元素放在新行上?

如何在新行上放置"输入"元素?在上面的例子中,所有元素都是顺序放置的,即lable-> input-> lable-> input等.

/* ----------- My Form ----------- */
.myform{
    margin:0 auto;
    padding:14px;
}
#stylized{
    border-width:1px;
    border-style:solid;
    border-color:#b7ddf2;
    background:#ebf4fb;
}
#stylized h1 {
    font-size:14px;
    font-weight:bold;
    margin-bottom:8px;
    border-width:1px;
    border-style:solid;
    border-color:#b7ddf2;
    padding-bottom:10px;
}
#stylized label{
    display:block;
    font-size:11px;
    font-weight:bold;
    text-align:right;
    float:left;
}
#stylized input{
    float:left;
    font-size:11px;
    padding:4px 2px;
    border:solid 1px #aacfe4;
    width:70px;
    margin:2px 0 20px 10px;
}
/* --------- End of Form --------- */

    <div id="stylized" class="myform">
        <form id="form" name="form" method="post" action="index.html">
        <h1>Data</h1>
        <label>Name: </label>
        <input type="text" name="name" id="name"/>
        <label>Email: </label>
        <input …
Run Code Online (Sandbox Code Playgroud)

html css

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

如何创建没有标题栏的 gtk+ 窗口,调整大小和移动属性有效

如何创建没有标题栏的 gtk+ 窗口,调整大小和移动属性有效。我检查了gtk_window_set_decorated功能,但它禁用了窗口的调整大小和移动功能。我已经找到了这个答案,但我认为这与它无关。

我试图在 gtk_window_set_decorated 之后设置 resizeable true 但仍然无法正常工作

请检查代码

    #include <gtk/gtk.h>
    int main (int argc,
    char *argv[])
    {  
      GtkWidget *window;
      /* Initialize GTK+ and all of its supporting libraries. */
      gtk_init (&argc, &argv);
      /* Create a new window, give it a title and display it to the user. */
      window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
      gtk_window_set_title (GTK_WINDOW (window), "Hello World");
      gtk_window_set_decorated (GTK_WINDOW (window), FALSE);
      gtk_window_set_resizable (GTK_WINDOW (window), TRUE);
      //gtk_window_set_gravity(GTK_WINDOW (window), GDK_GRAVITY_NORTH_EAST);
      //gtk_window_set_deletable (GTK_WINDOW (window), FALSE); …
Run Code Online (Sandbox Code Playgroud)

c gtk

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

如何使用ArrayIterator或ArrayObject使用implode?

我在使用ArrayIterator时遇到了一些问题(实际上,与ArrayObject相同的问题).

对于99%的所有内容,我的扩展ArrayIterator表现得像一个阵列,并且运行良好.

不幸的是,implode()不喜欢被赋予ArrayIterator(或ArrayObject).

我无法在文档中找到任何建议通过扩展ArrayIterator实现任何其他类的文档,也没有任何其他方法可以覆盖.

任何人都可以建议如何使这个工作?(注意:每次使用implode时都要转换为数组不是解决方案,因为我希望这个类似数组的对象能够完全作为一个数组工作,并且不需要使用它来代码知道/关心/强制转换)

php implode arrayiterator

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

JavaScript闭包和这个对象

我以为我对thisJavaScript 中的对象有了合理的理解.在处理对象,回调以及事件和处理程序时,我从远古时代就没有遇到过任何问题.然而,现在一切都发生了变化.

爱上了JavaScript,我已经爱不释手了.纯JS,也就是说,不是jQuery,prototype.js,dojo ......当然,我已经开始使用闭包了.但在某些情况下,this让我措手不及.把这个片段拿一个:

function anyFunc(par)
{
    //console.log(par);
    console.log(this);
}

function makeClosure(func)
{
    return function(par)
    {
        return func(par);
    }
}
var close = makeClosure(anyFunc);
close('Foo');

var objWithClosure = {cls:makeClosure(anyFunc),prop:'foobar'};
objWithClosure.cls(objWithClosure.prop);

var scndObj = {prop:'Foobar2'};
scndObj.cls = makeClosure;
scndObj.cls = scndObj.cls(anyFunc);
scndObj.cls(scndObj.prop);
Run Code Online (Sandbox Code Playgroud)

在所有三种情况下,this日志都作为窗口对象.当然,这是一个简单的解决方法:

function makeClosure(func)
{
    return function(par)
    {
        return func.call(this,par);
    }
}
Run Code Online (Sandbox Code Playgroud)

这个修复工作,我把它放在这里,以避免人们回答这个问题,而不解释我需要知道的事情:为什么这样做会像在这里一样?

确保调用者实际上是闭包属于的对象.我不明白的是:this在第一种情况下,指向窗口对象,但在其他情况下,它不应该.我this在返回之前尝试登录makeClosure函数,它确实记录了对象本身,而不是window对象.但是当使用实际的闭包时,this返回指向窗口对象.为什么?

我唯一能想到的是,通过将anyFunc函数作为参数传递,我实际上是在传递window.anyFunc.所以我尝试了这个快速修复:

function makeClosure(func)
{
    var theFunc = func; …
Run Code Online (Sandbox Code Playgroud)

javascript closures object this

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

IE8中的JavaScript事件原型

我正在尝试向Event原型添加一个方法.为了调用/设置,preventDefault()或者在IE中说话returnValue = false和-if desired- stopPropagation()/ cancelBubble = true;.我认为下面的代码已经足够了.

Event = Event || window.Event;
//^^ makes the fiddle work on IE8 ^^
if(!(Event.prototype.stopEvent))
{
    Event.prototype.stopEvent = function(propagate)
    {
        "use strict";
        propagate = (propagate ? true : false);
        if (this.preventDefault)
        {
            this.preventDefault();
            if (propagate === false)
            {
                this.stopPropagation();
            }
        }
        else
        {
            this.returnValue = false;
            this.cancelBubble = !propagate;
        }
        return this;
    };
}
Run Code Online (Sandbox Code Playgroud)

这看起来很有效,你可以在这里看到.这个小提琴OK在IE8,firefox和chrome中显示.虽然,当我将其添加到我的脚本时,IE8在第一行中断,说"事件未定义".离开"use strict";没有任何区别.

不情愿地,我也尝试了这个:

if (typeof …
Run Code Online (Sandbox Code Playgroud)

javascript prototype javascript-events internet-explorer-8

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

JavaScript的控制流构造:特定于浏览器或JS固有的

range在JS中编写了一个小函数.我已经在Chrome 19,FF和IE(7-9)中测试了它并且它运行良好.我的问题与while声明有关.

function range(from,to,step)
{
    'use strict';
    var sCode,eCode,result;
    result = [];
    step = (!step || isNaN(step) || step === 0 ? 1 : step);
    sCode = (''+from).charCodeAt(0);
    eCode = (''+to).charCodeAt(0);
    step *= (sCode > eCode && step > 0 ? -1 : 1);
    do
    {
        if (String.fromCharCode(sCode))
        {
            result.push(String.fromCharCode(sCode));
        }
    }while((step > 0 && eCode >= (sCode+=step)) || (step < 0 && eCode <= (sCode+=step)));
    return result;
}
Run Code Online (Sandbox Code Playgroud)

我记得在这里回答JS如何处理控制流构造和逻辑运算符的问题.我认为它与检查某个对象是否有某种方法有关,如果有,则使用它的返回值(if (event.returnValue && e.returnValue === true) …

javascript cross-browser variable-assignment logical-operators

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

so库中定义的同名全局变量

我想知道以下场景中的行为:-

//file1.c : Main file of a user-space process,say Process X.
int a; //GLobal variable in file1.c
func(); //Library function

//file2.c :Part of .so used by Process X.
int a;
void func()
{
    a=0;//Access variable a.
}
Run Code Online (Sandbox Code Playgroud)

如果 Process X 调用func()库的函数,会发生什么?

c linux shared-libraries

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

这会避免UB吗?

这个问题更像是一个学术问题,因为没有正当理由再写自己的offsetof宏了.不过,我已经在这里和那里看到了这个本土实现的弹出窗口:

#define offsetof(s, m) ((size_t) &(((s *)0)->m))
Run Code Online (Sandbox Code Playgroud)

从技术上讲,这是取消引用NULL指针(AFAIKT):

C11(ISO/IEC 9899:201x)§6.3.2.3指针第3节

具有该值的整数常量表达式0或此类表达式转换为类型 void *称为空指针常量

所以上面的实现是根据我如何阅读标准,与写作相同:

#define offsetof(s, m) ((size_t) &(((s *)NULL)->m))
Run Code Online (Sandbox Code Playgroud)

它让我怀疑的是,通过改变一个微小的细节,下面的定义offsetof是完全合法的,可靠的:

#define offsetof(s, m) (((size_t)&(((s *) 1)->m)) - 1)
Run Code Online (Sandbox Code Playgroud)

看起来,而不是0,1用作指针,我在结尾处减去1,结果应该是相同的.我不再使用NULL指针了.据我所知,结果是一样的.

所以基本上:有没有理由为什么使用1而不是0在这个offsetof定义中可能不起作用?在某些情况下它仍会导致UB,如果是这样的话:何时以及如何?基本上,我在这里问的是:我在这里错过了什么吗?

c undefined-behavior language-lawyer

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

迭代多维数组

我试图获取项目ID,然后在该项目ID中获取所有option_name/option_values.所以我最终得到,ID:123,颜色:蓝色,大小:6.ID:456,颜色:黄色,大小:8.但是我得到正确的项目ID,但是option_name/option_value没有正确通过,空白或只是一个随机字母.

这是我的代码不起作用,

foreach($itemlist as $item)
{
   echo $item['ID'];

   foreach($item as $option)
   { 
       echo $option['option_name'];
       echo $option['option_value'];
   }
 }
Run Code Online (Sandbox Code Playgroud)

哪里$itemlist是这样的:

Array
(
    [1] => Array
        (
            [ID] => 123
            [QTY] => 1
            [MODEL] => sdfsd
            [IMAGE] => 
            [1] => Array
                (
                    [option_name] => Color
                    [option_value] => Blue
                    [option_price] => 0.0000
                )

            [2] => Array
                (
                    [option_name] => Size
                    [option_value] => 6
                    [option_price] => 0.0000
                )

            [price] => 0
        )

    [2] => Array
        (
            [ID] => 456
            [QTY] => 0 …

php arrays foreach multidimensional-array

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