Chrome和Mozilla中存在Javascript错误,但Opera中没有.未定义名称



所以我最近开始编程页面。。。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

希望这能帮助

相关内容

  • 没有找到相关文章

最新更新