当用户从选择框中选择一个选项时,我正在尝试做某事 - 尽可能简单吗?我正在使用JQuery 1.3.1注册一个带有选择框id的点击处理程序.一切都很好,直到我使用Chrome和Safari测试,发现它不起作用.
见下面的代码:
<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)
任何人都知道我应该为此工作吗?警报最终会被触发,但只有在双击选择框后才能触发?
在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) 我有一个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文件包含在另一个域中时,该对象在运行时未定义.
如何通过指定触发事件的坐标(如onmousedown,onmouseup,onclick等等)来获取html控件的id.坐标可以得到
e.clientX,e.clientY其中e是事件对象.
我们的想法是获得一个控件的id,在该控件上完成click事件而不在该控件的定义中有任何onClick事件.
这将省去为多个控件指定onClick事件的需要.
我正在尝试构建一个greasemonkey脚本,该脚本将根据用户与其他动态创建的数据表交互动态创建数据表.我的问题是我每次创建一个表时都要进行两次传递:一次创建表,另一次去抓取表中的所有对象我要添加事件处理程序(通过id)并添加他们的各种事件处理程序.
如果我尝试在创建表并将其插入HTML之前将onClick事件添加到表td,我会得到"组件不可用"异常.
这非常麻烦,因为我必须单独维护一个id列表以及当我第二次传递添加处理程序时应该对这些元素做什么,或者开发一个我知道的命名约定,基于id,我应该怎么做元素.
有一个更好的方法来做到这一点.我还没弄明白.有人有主意吗?
我疯了,试图找出如何使这项工作.代码看起来大致如下:
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应该让这样的事情很好,这不是我想要使用的解决方法.
最后,我已经确定这不是我特别需要解决的问题,但是我不理解为什么会发生这种情况.
基本上,我有一些复选框,我只希望用户能够选择一定数量的复选框.我正在使用下面的代码来实现这种效果.
$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 …
假设我使用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
我在网页上有一个图像,它由服务器端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或其他任何方式检测加载何时完成?