所以我最近开始编程页面...很少,我正在尝试我以前做过的页面,所以我只是复制了代码并更改了值。我想知道是否有人可以说明为什么它在我的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 / ...编程了几个月......我应该只传递整个元素并在函数内部取得我需要的东西吗?
答案 0 :(得分:2)
Opera可能引用document.daySelector.value
,而FF和Chrome引用window.daySelector.value
。替换为this.value
它将绑定到节点。
答案 1 :(得分:1)
将您的onchange替换为:onchange="changeDate(this.value)"
在该上下文中未定义daySelector。 Opera必须为您处理它或者默默地消耗错误。
答案 2 :(得分:0)
替换
onchange="changeDate(daySelector.value)"
带
onchange="changeDate(this.value)"
这应该可以正常工作
答案 3 :(得分:0)
提交的答案是正确的,但我建议您查看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文档以了解如何实现它。再次,这很容易。使用Google代码的快速示例(不要忘记从Google获取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
希望这有帮助