标签: javascript-events

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

在Safari中没有触发JQuery Click事件?

当用户从选择框中选择一个选项时,我正在尝试做某事 - 尽可能简单吗?我正在使用JQuery 1.3.1注册一个带有选择框id的点击处理程序.一切都很好,直到我使用Chrome和Safari测试,发现它不起作用.

  1. Firefox 3.05 - 是的
  2. IE 7.0.5730.13 - 是的
  3. IE6Eolas - 是的
  4. Sarafi 3.2.1 - 没有
  5. Chrome 1.0.154.43 - 没有

见下面的代码:

<html>
<head>
    <script language="javascript" type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js"></script>
    <script language="javascript">
    $(document).ready(function(){
        $('#myoption').click(function() { alert('Select Dropdown was clicked: '+ $('#myoption').val()); });
    });     
    </script>
</head>
<body>
    <select id="myoption">
    <option value="A">A</option>
    <option value="B">B</option>
    </select>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

任何人都知道我应该为此工作吗?警报最终会被触发,但只有在双击选择框后才能触发?

javascript safari jquery select javascript-events

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

window.onbeforeunload检测POST或GET

在window.onbeforeunload事件中有没有办法检测新请求是POST(在同一页面上)还是GET(转到页面)?看到新的document.location也很棒.

window.onbeforeunload = winClose;
function winClose() {
    //Need a way to detect if it is a POST or GET
    if (needToConfirm) {       
        return "You have made changes. Are you sure you want?";
    }
}
Run Code Online (Sandbox Code Playgroud)

javascript-events

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

加载了表示我的JS脚本的最佳方式

我有一个JS脚本将托管在我的服务器上,其他人将嵌入他们的html,即

...<code for http://yoursite.com />
<script type="text/javascript" src="http://mysite.com/awesome.js" />
...<code for http://yoursite.com />
Run Code Online (Sandbox Code Playgroud)

我的脚本声明了一个对象,其中包含一组可用作javascript Object()的属性,即

<script type="text/javascript">
//From http://mysite.com/awesome.js
alert(Awesome.Name);
</script>
Run Code Online (Sandbox Code Playgroud)

由于加载时间的变化,似乎我需要发信号通知我的脚本中的"Awesome"对象已准备就绪.我需要它自己站立,因此不依赖于特定的JS框架.

我是否需要发布自己的自定义JS事件,或者我的脚本加载的简单事实是否被现有的页面级事件之一捕获?我该怎么做呢?

更新:作为参考点,如果我将JS包含在从" http://mysite.com " 运行的HTML页面中,则可以使用并填充Awesome对象.当JS文件包含在另一个域中时,该对象在运行时未定义.

javascript unobtrusive-javascript javascript-events

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

javascript - 通过指定坐标检索html控件

如何通过指定触发事件的坐标(如onmousedown,onmouseup,onclick等等)来获取html控件的id.坐标可以得到

e.clientX,e.clientY其中e是事件对象.

我们的想法是获得一个控件的id,在该控件上完成click事件而不在该控件的定义中有任何onClick事件.

这将省去为多个控件指定onClick事件的需要.

javascript javascript-events

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

如何将javascript事件处理程序注册到尚未添加到页面的元素

我正在尝试构建一个greasemonkey脚本,该脚本将根据用户与其他动态创建的数据表交互动态创建数据表.我的问题是我每次创建一个表时都要进行两次传递:一次创建表,另一次去抓取表中的所有对象我要添加事件处理程序(通过id)并添加他们的各种事件处理程序.

如果我尝试在创建表并将其插入HTML之前将onClick事件添加到表td,我会得到"组件不可用"异常.

这非常麻烦,因为我必须单独维护一个id列表以及当我第二次传递添加处理程序时应该对这些元素做什么,或者开发一个我知道的命名约定,基于id,我应该怎么做元素.

有一个更好的方法来做到这一点.我还没弄明白.有人有主意吗?

javascript javascript-events event-delegation

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

无法将输入字段集中在装有ajax调用的DOM中

我疯了,试图找出如何使这项工作.代码看起来大致如下:

function onDropDownChanged() {
  $("#updatePanel").load(
    "myUrl",
    { id: $("#myDropDown option:selected").val() },
    onPanelLoaded
  );
}
function onPanelLoaded() {
  $("#theTextInput").focus();
}
$(document).ready(function() {
  $("#myDropDown").change(onDropDownChanged);
}
Run Code Online (Sandbox Code Playgroud)

第一次触发更改处理程序时,它会执行ajax更新,并且文本框会被聚焦.

但是,在后续更改中,它继续执行ajax更新,但文本框永远不会再次聚焦.

我发现,如果在onDropDownChanged,我$("#updatePanel").empty()在ajax调用之前添加,文本框将始终聚焦.问题是整个表格消失一秒钟,导致丑陋的闪光.鉴于ajax应该让这样的事情很好,这不是我想要使用的解决方法.

javascript jquery javascript-events

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

this.click()和$(this).click()有什么区别?

最后,我已经确定这不是我特别需要解决的问题,但是我不理解为什么会发生这种情况.

基本上,我有一些复选框,我只希望用户能够选择一定数量的复选框.我正在使用下面的代码来实现这种效果.


$j( function () {
    $j('input[type=checkbox].vote_item').click( function() {
        var numLeft = (+$j('#vote_num').text());
        console.log(numLeft);
        if ( numLeft == 0 && this.checked ) {
            alert('I\'m sorry, you have already voted for the number of items that you are allowed to vote for.');
            return false;
        } else {
            if ( this.checked == true ) {
                $j('#vote_num').html(numLeft-1);
            } else {
                $j('#vote_num').html(numLeft+1);
            }
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

当我测试它时,我注意到如果我使用:


$j('input[type=checkbox]').each( function () {
    this.click()
});
Run Code Online (Sandbox Code Playgroud)

Javascript的反应如我所料,但是当用于:


$j('input[type=checkbox]').each( function () {
    $j(this).click()
});
Run Code Online (Sandbox Code Playgroud)

它实际上会使计数器计数UP.

我确实意识到这不是使用计数器保持计数的最安全的方法,但我确实有服务器端错误检查,防止超过必要的数量输入数据库,这就是我决定的原因它实际上并不需要修复.

编辑:$ j是因为我必须在noConflict模式下使用jQuery …

javascript jquery javascript-events

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

Javascript - 以编程方式调用事件

假设我使用addEventListener或attachEvent(取决于浏览器)向对象添加事件; 是否有可能以后以编程方式调用这些事件?

使用如下对象添加/删除事件处理程序:

var Event = {
    add: function(obj,type,fn) {
        if (obj.attachEvent) {
            obj.attachEvent('on'+type,fn);
        } else {
            obj.addEventListener(type,fn,false);
        }
    },
    remove: function(obj,type,fn) {
        if (obj.detachEvent) {
            obj.detachEvent('on'+type,fn);
        } else {
            obj.removeEventListener(type,fn,false);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

或者我是否需要存储每个处理程序的副本,只需添加一个Event.invoke(...)函数?

编辑:此外,jQuery不是一个选项:D

javascript javascript-events

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

检测特定图像何时完成加载

我在网页上有一个图像,它由服务器端CGI程序动态生成.定期刷新该图像和/或根据用户输入改变该图像.所以我有一个类似的Javascript函数

// <img id="screen" src=""> is elsewhere in the page
function reloadImage() {
    $("#screen").attr("src", make_cgi_url_based_on_form_inputs());
}
Run Code Online (Sandbox Code Playgroud)

这很好用,但有时加载图像需要一段时间.因此,我希望某些消息显示为"正在加载图像...",但是当图像加载并在浏览器中显示时,该图像会消失.

是否有任何类型的Javascript事件可以做到这一点?或者,有没有其他方法可以加载/更改/更新图像并通过Ajax或其他任何方式检测加载何时完成?

javascript jquery javascript-events

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