标签: javascript-events

如何使用JavaScript将'this'传递给函数

我有以下代码,旨在为类名为"State"的所有元素创建一个onchange事件处理程序.唯一的问题是我希望将元素传递给'StateChange'函数.如何更新此JS以将"this"传递给StateChange函数?谢谢!

var c = document.getElementsByClassName('State');
for (i = 0; i < c.length; i++) c[i].onchange = createEventHandler( StateChange, c[i] );
Run Code Online (Sandbox Code Playgroud)

编辑:我忘了提供createEventHandler函数.对不起...这是:

function createEventHandler(fn, input) {
      return function () {
          fn(input);
      };
}
Run Code Online (Sandbox Code Playgroud)

还有一些澄清.该函数的目的是避免将onchange事件放在每个元素旁边的类名='State'的需要.结果应该和我写的一样:

<select id="MyState1" class="State" onchange="StateChange(this)">
Run Code Online (Sandbox Code Playgroud)

javascript javascript-events

3
推荐指数
1
解决办法
3392
查看次数

window.load和document.ready中的jQuery data()是否未定义?

需要存储一些数据window.load并检索document.ready:

<script>
   $(window).load(function() { // Store here
      $('img.storable').each(function() {
         $(this).data("key", "value");
         console.log($(this).data("key")); // Output: value
      };
   };

   $(document).ready(function() { // Retrieve here
      $('img.storable').each(function() {
         console.log($(this).data("key")); // Output: undefined!
      };
   };
</script>
Run Code Online (Sandbox Code Playgroud)

在输出document.ready是不确定的.我错过了关于dom事件的事吗?

javascript jquery dom javascript-events

3
推荐指数
1
解决办法
1549
查看次数

jQuery的新on()方法如何与性能中的live()方法进行比较?

jQuery有一个所谓的新方法on()被建议更换delegate(),live()和.bind().

例如,使用两种方法:

$('#some-button').on('click', function() {
    //do something when #some-button is clicked
});
$('#some-button').live('click', function() {
    //do something when #some-button is clicked
});
Run Code Online (Sandbox Code Playgroud)

哪一个表现更好?(我知道这两个事件上下文都在文档级别.)

jquery event-handling javascript-events

3
推荐指数
1
解决办法
3054
查看次数

谷歌地图 - 标记在反弹之前闪现

我已经建立了一个谷歌地图,其中标记在一些外部链接的翻转时反弹.我创建了这个短函数来反弹标记:

function makeBounce(marker) {
        marker.setAnimation(google.maps.Animation.BOUNCE);
        setTimeout(function(){ marker.setAnimation(null); }, 750);
}
Run Code Online (Sandbox Code Playgroud)

我正在用它来执行它:

<a onmouseover="javascript:map.panToBounds(bounds);makeBounce(markersArray[1]);"  href="javascript:google.maps.event.trigger(markersArray[1], 'click');">Marker name</a>
Run Code Online (Sandbox Code Playgroud)

我注意到的是,在标记反弹之前,它们会闪烁.这几乎是不可察觉的,但它真的很烦人(特别是因为谷歌自己的博客发布弹跳标记很顺利:http://googlegeodevelopers.blogspot.com/2010/12/map-markers-they-move.html).

我在这里创建了一个JS Fiddle来演示它:http://jsfiddle.net/RmDuz/(滚动蓝色链接以查看问题).

我已经在FF9和Chrome 16中尝试过了,两者都存在问题.

有什么想法吗?

问题似乎是标记图像是在弹跳之前动态(重新)加载的,因为在Chrome中,我会在标记再次出现之前看到"无图像"框然后反弹.

编辑:我已经改变了代码,以使用map API监听器而不是javascript函数,希望API代码可能更高效,但没有快乐:(

    google.maps.event.addListener(marker, 'dblclick', (function(marker, i) {
        return function() {
            marker.setAnimation(google.maps.Animation.BOUNCE);
            setTimeout(function(){ marker.setAnimation(null); }, 750);
        }
    })(marker, i));
Run Code Online (Sandbox Code Playgroud)

我正在使用dblclick因为我不希望鼠标悬停,这意味着当标记翻转时会触发动画.我只希望在外部链接滚动时触发动画:

<a onmouseover="javascript:google.maps.event.trigger(markersArray[1], 'dblclick');">Link name</a>
Run Code Online (Sandbox Code Playgroud)

我已经更新了JS Fiddle以反映这一点:http://jsfiddle.net/RmDuz/1/

javascript-events google-maps-api-3 google-maps-markers

3
推荐指数
1
解决办法
5678
查看次数

动态插入jQuery库加载完成后执行我的jQuery脚本

我通过<script>标签在页面上动态插入jQuery库:

jq = document.createElement('script');
jq.setAttribute('src','//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js');
b.appendChild(jq);
Run Code Online (Sandbox Code Playgroud)

然后我有一些jQuery脚本需要在jQuery库加载完成后运行并准备好使用:

$(f).load(function() {
    $(f).fadein(1000);
});
Run Code Online (Sandbox Code Playgroud)

如何让它等待jQuery加载?

javascript jquery events javascript-events onload

3
推荐指数
1
解决办法
3666
查看次数

从onSubmit事件处理程序添加或减去函数?

我有以下代码:

function showAddrBox() {
    var prompt = document.getElementById('addr_prompt');
    prompt.style.display = 'block';
    document.generic_form.address.style.display = 'block';
    document.generic_form.onsubmit = validateAddrForm;
}

function hideAddrBox() {
    var prompt = document.getElementById('addr_prompt');
    prompt.style.display = 'none';
    document.generic_form.address.style.display = 'none';
    document.generic_form.onsubmit = null;
}
Run Code Online (Sandbox Code Playgroud)

问题是,有时候我想要保留onSubmit附加的附加功能.我希望能够在onSubmit事件中添加和删除单个函数,而不是仅使用"onsubmit ="进行设置.换句话说,我需要一种方法来完成这样的事情:

document.form.onsubmit += function;
document.form.onsubmit -= function;
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

javascript javascript-events onsubmit

3
推荐指数
2
解决办法
6137
查看次数

Three.js中几何的事件处理?

我想在three.js中寻找几何/摄像机/灯光(我们添加到场景中的东西)的某种事件处理?

我用谷歌搜索,但找不到任何相关的东西.我做了一个简单的Sphere渲染并尝试在firebug中看到DIV内容,但是只有一个画布,并且在画布上添加任何"onclick"会使所有画布的事件发生,也就是说,它不仅仅用于球体或光线.

有什么建议 ?

javascript event-handling javascript-events three.js

3
推荐指数
1
解决办法
4924
查看次数

如何在Gmail中检测键盘事件

我正在编写一个浏览器扩展,需要将处理程序附加到所有页面上的keyup和keydown事件.我可以使用以下内容脚本代码很好地工作.

document.addEventListener("keydown",keyDown, true);      
document.addEventListener("keyup", keyUp, true);
Run Code Online (Sandbox Code Playgroud)

我不能让这个在Gmail中运行.具体来说,在编写新电子邮件的正文时,我无法使其工作.它将适用于我测试过的其他任何地方.我认为问题是因为Gmail正在调用stopPropagation所有键盘事件,但很难调试其最小化代码.我认为将第3个参数设置为true会导致在CAPTURE_PHASE此期间捕获事件,但这不起作用.

如何使用Google Chrome内容脚本在Gmail中编写新主体时捕获keyup和捕获keydown事件?

编辑:

通过添加"all_frames": true,到我的清单,我确保将我的内容脚本注入到DOM的所有iframe中.我甚至尝试使用以下代码:

document.addEventListener("DOMNodeInserted", function (event) {
     if(event.type === "DOMNodeInserted") {
        if(event.srcElement.nodeName === "IFRAME") {
        console.log(event.srcElement.nodeName + " iframe detected");
        event.srcElement.addEventListener("keydown", function(kevent) {
            document.dispatchEvent(kevent);
            }, true);
        event.srcElement.addEventListener("keyup", function(kevent) {
            document.dispatchEvent(kevent);
            }, true);

    }
}
},true);
Run Code Online (Sandbox Code Playgroud)

这仍然无法解决Gmail的问题.

javascript gmail javascript-events google-chrome-extension

3
推荐指数
1
解决办法
2307
查看次数

单选按钮html缺少已检查属性,但firebug表示已选中

提前谢谢您的时间.

问题陈述摘要:浏览器上的单选按钮html不显示checked属性,但Firebug指示无线电的checked属性设置为checked

经过测试

Broswer:FF 3.6.18和IE8 jQuery:1.5 MVC3(Razor)

细节

使用MVC3(使用Razor)我正在从服务器渲染以下单选按钮.所需的功能是在检查一个无线电时,另一个应该是未选中的,反之亦然.换句话说,允许用户只选择一个选项 - 比如val1或val2.

<div id="myRadioList">
    <div>
        <input type="radio" value="val1" onclick="updateFunctionCalledHere(this)" name="myRadioName" id="myRadioName_val1" checked="checked">

    </div>
    <div>
        <input type="radio" value="val2" onclick="updateFunctionCalledHere(this)" name="myRadioName" id="myRadioName_val2">
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

我所观察到的是,如果用户切换所选择的无线电,myRadioName_val2则显示使用firebug检查新选择的无线电(假设),但html仍然反映其他单选按钮已选中.因此,其他一些验证失败了.

我已经尝试删除两个单选按钮的所有已检查属性,然后检查单击的那个.

这就是我正在做的设置当前点击的无线电,这是无效的

$("#myRadioList > div > input[value='myRadioName_val2]').attr('checked', 'checked');
Run Code Online (Sandbox Code Playgroud)

我正在简化我的代码以避免发布不必要的细节.

谢谢!

javascript jquery javascript-events jquery-1.5

3
推荐指数
1
解决办法
2258
查看次数

手柄模板中的动作未触发

我有以下简单的代码:

(JSFiddle)http://jsfiddle.net/aR2UX/3/

无论我做什么,模板中的动作都不会触发.我很怀疑这是由于视图呈现的方式,但无论我读什么,我都无法绕过它.

我仍在尝试理解余烬视图,但从我所读到的内容中我的代码应该起作用.它似乎没有,任何人都可以帮助我吗?

(这是在rails 3.2 app中,使用ember-rails,ember 0.9.4和把手模板gem,btw).

非常感谢任何帮助,因为我为这个项目的ember带来了一点风险.

javascript javascript-events handlebars.js ember.js

3
推荐指数
1
解决办法
3150
查看次数