更新:( 回顾,小提琴和赏金)
这个问题并没有得到太多的关注,所以我要花一些代表.我知道我的答案和问题往往过于冗长.这就是为什么我继续设置这个小提琴,在我看来,这是我目前不得不用来接近冒泡change事件的代码.我正试图解决的几个问题:
pseudo-change事件不会触发一个select元素,除非它失去焦点.在某些情况下,应在选择新值时重定向客户端.我该如何实现这一目标?realTarget属性.checked通过单击标签在IE中更改复选框的-state时,一切都很好(虽然它需要一些讨厌的解决方法),但是当直接单击复选框时,会调用处理程序,但是检查状态保持不变,直到我单击一个第二次.然后值会更改,但不会调用处理程序.任何可以帮助我解决上述一个或多个问题的信息将不胜感激.拜托,我没有忘记添加一个jQuery标签,我喜欢纯JS,所以我正在寻找一个纯粹的JS答案.
我有一个网页上有超过250个选择元素,以及20~30个复选框.我还必须跟踪用户的操作,并采取适当的措施.因此,我很自然地委派变更事件,而不是添加数百个听众,恕我直言.
当然,IE -company策略:IE8必须得到支持 - 在我需要时不会触发onchange事件.所以我想假装一个onchange事件.到目前为止,我所做的工作相当不错,除了一件真正让我烦恼的事情.
我正在使用onfocusin并onfocusout注册活动.在某些情况下,当用户从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
如何在新行上放置"输入"元素?在上面的例子中,所有元素都是顺序放置的,即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) 如何创建没有标题栏的 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) 我在使用ArrayIterator时遇到了一些问题(实际上,与ArrayObject相同的问题).
对于99%的所有内容,我的扩展ArrayIterator表现得像一个阵列,并且运行良好.
不幸的是,implode()不喜欢被赋予ArrayIterator(或ArrayObject).
我无法在文档中找到任何建议通过扩展ArrayIterator实现任何其他类的文档,也没有任何其他方法可以覆盖.
任何人都可以建议如何使这个工作?(注意:每次使用implode时都要转换为数组不是解决方案,因为我希望这个类似数组的对象能够完全作为一个数组工作,并且不需要使用它来代码知道/关心/强制转换)
我以为我对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) 我正在尝试向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) 我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
我想知道以下场景中的行为:-
//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()库的函数,会发生什么?
这个问题更像是一个学术问题,因为没有正当理由再写自己的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,如果是这样的话:何时以及如何?基本上,我在这里问的是:我在这里错过了什么吗?
我试图获取项目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 …