我有一个自定义的jQuery插件,它将change事件绑定到表单元素,在这种情况下是一些input元素.该change事件用于向某些其他组件指示已发生更改.
这应该是正常的.
但是,我遇到了将附加change事件绑定到相同input元素的需要 - 以便其他组件可以对事件起作用.我不想更换插件change,之后再运行一个额外的功能.
有没有办法在jQuery中绑定多个事件,或者,实现这个的最佳方法是什么?
有没有一种递归合并数组的方法,就像PHP的array_merge_recursive()函数一样,除了整数键被视为与字符串键相同?
(对于进程而言,密钥仍然可以作为整数进行解析,这一点非常重要.)
例如:
$a = array(
'a' => array(1)
);
$b = array(
'a' => array(2, 3)
);
var_dump(array_merge_recursive($a, $b));
Run Code Online (Sandbox Code Playgroud)
将"a"按照预期合并键和输出,如下所示:
array(1) {
["a"] => array(3) {
[0] => int(1)
[1] => int(2)
[2] => int(3)
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当使用整数键时(即使作为字符串):
$a = array(
'123' => array(1)
);
$b = array(
'123' => array(2, 3)
);
var_dump(array_merge_recursive($a, $b));
Run Code Online (Sandbox Code Playgroud)
array_merge_recursive() 将返回:
array(2) {
[0] => array(3) {
[0] => int(1)
}
[1] => array(2) {
[0] => …Run Code Online (Sandbox Code Playgroud) 也许我会疯了,但我可以发誓有一个PHP核心函数,它将两个数组作为参数:
$a = array('1', '3');
$b = array('1'=>'apples', '2'=>'oranges', '3'=>'kiwis');
Run Code Online (Sandbox Code Playgroud)
并执行一个交集,$a检查数组中的值是否与数组中的键发生冲突$b.回归之类的
array('1'=>'apples', '3'=>'kiwis');
Run Code Online (Sandbox Code Playgroud)
这样的功能是否存在(我在文档中遗漏了),还是有一种非常优化的方法来实现同样的功能?
我注意到一个小的不一致性,我希望将其验证为HTML5的一个怪癖,或者是Video.js的特定内容.
看来如果你currentTime()在提供新时间的同时调用Video.js的功能,任何进一步调用currentTime()(获取当前时间)将不会返回正确的时间(它将返回上一次),直到timeupdate事件触发.timeupdate活动结束后,currentTime()将返回正确的时间.
例如,假设视频尚未开始播放,但Video.js已加载,以及所有视频元素等:
videoPlayer.addEvent('timeupdate', function() {
console.log('Event callback: ' + player.currentTime);
});
console.log('Original time: ' + player.currentTime);
player.currentTime(100);
console.log('New time: ' + player.currentTime);
Run Code Online (Sandbox Code Playgroud)
我期待的输出看起来像:
Original time: 0
New time: 100
Event callback: 100
Run Code Online (Sandbox Code Playgroud)
但是我收到的是:
Original time: 0
New time: 0
Event callback: 100
Run Code Online (Sandbox Code Playgroud)
任何见解都会很棒!
编辑:我可以在OSX上的Chrome和Safari中重现这一点,但不能在OSX上重现这一点(全部使用HTML5).我也可以使用Flash播放器和使用HTML5播放器的IE9在IE8上重现这一点.
我正在尝试在PHP中编写一个函数,它接受一个字符串数组(needle)并执行与另一个字符串数组(haystack)的比较.此函数的目的是为AJAX搜索快速提供匹配的字符串,因此需要尽可能快.
这里有一些示例代码来说明这两个数组;
$needle = array('ba','hot','resta');
$haystack = array(
'Southern Hotel',
'Grange Restaurant & Hotel',
'Austral Hotel',
'Barsmith Hotel',
'Errestas'
);
Run Code Online (Sandbox Code Playgroud)
虽然这本身很容易,但比较的目的是计算有多少needle字符串出现在haystack.
但是,有三个限制;
needle必须只在单词的开头的字符匹配.例如,"hote"将匹配"Hotel",但"resta"将不匹配"Errestas".needles的数量,而不是needle出现次数.如果一个地方被命名为"酒店宾馆酒店",我们需要的结果1不是3.使用上面的例子,我们期望得到以下关联数组:
$haystack = array(
'Southern Hotel' => 1,
'Grange Restaurant & Hotel' => 2,
'Austral Hotel' => 1,
'Barsmith Hotel' => 2,
'Erresta' => 0
);
Run Code Online (Sandbox Code Playgroud)
我一直在尝试实现一个函数来执行此操作,使用一个preg_match_all()看起来像的正则表达式/(\A|\s)(ba|hot|resta)/.虽然这确保我们只匹配单词的开头,但它没有考虑包含相同needle两次的字符串.
我发帖看看别人是否有解决方案?
我有以下输入元素(我故意省略了示例中不需要的属性):
<input type="text" style="display: block; height: 40px; font-size: 14px; line-height: 40px"/>Run Code Online (Sandbox Code Playgroud)
在Chrome和Internet Explorer(也可能是Opera)中,输入内的任何文本都将垂直居中.但是,Firefox似乎忽略了这个声明.将其设置为display: inline-block;替代或使用vertical-align: middle;在Firefox中没有任何效果.
我也尝试将顶部和底部填充设置为13px,并将高度设置为14px(与字体大小相结合)将导致元素40px高.这按预期工作; 除了任何带有尾部的字符(如g,q,j等)在底部被切掉.
我正在寻找一种跨浏览器解决方案,用于在具有固定高度的输入框中垂直对齐文本.输入元素将具有自己的悬停和焦点样式,因此通过将元素本身垂直放置在40px高空间中来伪装居中并不是一种选择.
干杯
我试图用一个函数来扩展Javascript的Object类型,该函数检索属于该对象的所有属性名称(基本上是PHP的array_keys()函数对关联数组的作用).
Object.prototype.keys = function() {
var a = [];
for (var property in this) {
a.push(property);
}
return a;
};
var a = {a:1,b:2,c:3,d:4};
alert(a.toSource());
var b = a.keys();
alert(b.toSource());
Run Code Online (Sandbox Code Playgroud)
当变量b被警告时,我期待看到["a","b","c","d"],而不是我看到的["a","b","c","d","keys"].
看来for-in循环包括原型keys()函数.
是否有可能在仍然进行原型设计的同时避免这种行为,或者我是否应该避免一起进行原型设计?
javascript ×3
php ×3
arrays ×2
css ×1
html5 ×1
html5-video ×1
input ×1
intersection ×1
jquery ×1
key ×1
video.js ×1