所以我最近开始编程页面。。。Little thins和我在一个页面上尝试了一些我以前做过的事情,所以我只是复制了代码并更改了值。我想知道是否有人能澄清一下,为什么它在我的Opera浏览器中运行良好,但在我的Chrome或Firefox上却不正常(我用wamp作为我的计算机的本地网络服务器)
我所做的是使用一个元素及其值的更改(用户选择日期)来调用一个使用ajax的函数,调用数据库并返回内容,我认为不需要详细信息)
所以我有以下
<select name="daySelector" id="daySelectorId" onchange="changeDate(daySelector.value)">
<option value="-1">Day</option>
<option value="2012-01-30">2012-01-30</option>
<option value="2012-01-31">2012-01-31</option>
<option value="2012-02-01">2012-02-01</option>
<option value="2012-02-02">2012-02-02</option>
<option value="2012-02-03">2012-02-03</option>
<option value="2012-02-04">2012-02-04</option>
<option value="2012-02-05">2012-02-05</option>
<option value="2012-02-06">2012-02-06</option>
<option value="2012-02-07">2012-02-07</option>
<option value="2012-02-08">2012-02-08</option>
<option value="2012-02-09">2012-02-09</option>
<option value="2012-02-10">2012-02-10</option>
<option value="2012-02-11">2012-02-11</option>
<option value="2012-02-12">2012-02-12</option>
<option value="2012-02-13">2012-02-13</option>
</select>
Opera运行得很好,并回报了我想要的。。。但Chrome和Firefox出于某种原因说daySelector没有定义。。。当我使用"this"引用时,所有浏览器都可以正常工作。有趣的是,我从中获取代码的项目是我在更新我的电脑之前做的,我的电脑只安装了firefox(一个旧版本),我很确定它没有引起任何问题。。。
有什么想法吗。我意识到这本身不是问题,但我对这样的细节很好奇,我想知道。。。顺便说一句,对于那些已经用html/ajax/js/编程的人。。。几个月以来。。。我应该只传递整个元素并在函数中获取我需要的东西吗?
Opera可能引用document.daySelector.value
,而FF和Chrome则引用window.daySelector.value
。替换为this.value
,它将绑定到节点。
将onchange替换为:onchange="changeDate(this.value)"
daySelector未在该上下文中定义。Opera必须为您处理它,否则将默默地消耗错误。
更换
onchange="changeDate(daySelector.value)"
带有
onchange="changeDate(this.value)"
这应该很好
提交的答案是正确的,但我敦促您查看jQuery,因为它会简单得多,而且是跨浏览器的。
例如:
// Select the form element by id using the jQuery selector
var daySelector = $('#daySelectorId');
// Set the onchange event
daySelector.onChange(function(){
// Get the value of the form element
var value = $(this).val();
// Call the change date function
changeDate(value);
});
我理解这可能看起来有点复杂,但如果你把它分解开来,它就会有意义,这就是为什么我发表了明确的评论。
一旦你"得到了jQuery的jist",你就可以将上面的语句压缩成:
$('#daySelectorId').onChange(function(){changeDate($(this).val())});
只需将其放入javascript代码中,并从html.中删除"onchange=changeDate(day…"属性
您无需担心此问题无法跨浏览器运行
请务必查看jQuery文档以了解如何实现它。同样,它非常简单。使用谷歌代码的快速示例(不要忘记从谷歌获得API密钥,链接如下):
<script type="text/javascript" src="http://www.google.com/jsapi?key=GENERATED_API_KEY"></script>
<script type="text/javascript">
google.load("jquery", "1.7.1");
</script>
以上内容将简单地将jQuery加载到您的网站中。把这个放进你想使用的所有网页中。
在此处获取API密钥:http://code.google.com/apis/loader/signup.html
希望这能帮助