Chrome和Mozilla中的Javascript错误,但不是Opera。名称未定义

时间:2012-01-30 18:41:10

标签: javascript event-handling onchange

所以我最近开始编程页面...很少,我正在尝试我以前做过的页面,所以我只是复制了代码并更改了值。我想知道是否有人可以说明为什么它在我的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 / ...编程了几个月......我应该只传递整个元素并在函数内部取得我需要的东西吗?

4 个答案:

答案 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

希望这有帮助