1

我有一个非常简单的功能,似乎在 Chrome、Firefox 和 Safari 中都可以正常工作,但在 IE 中却出现了问题。我实际上是在尝试将其加载为 Windows 8 Web 应用程序,但从我所阅读的内容来看,它使用更宽容的 IE10 版本来输出。

假设我有一个<div>(或一个<a>...href我也试过这个),如下所示:

<div onClick="showSection('myTemplate.html');"></div>

这是我的功能:

function showSection(loca) {
    $("#optionView").show();
    $("#bookMenu").hide();
    $("#optionView").load('settings/'+loca);    
    $("#settingsButton").attr("onClick","showSettingsMain();");
}

为什么这不能专门在 IE 中工作?

4

2 回答 2

4

一个更好的选择是不使用内联事件处理程序,特别是因为您使用的是 jQuery。

相反,请使用以下 HTML:

<div id="main_div"></div>

并使用这个 Javascript:

$(document).ready(function () {
    $("#main_div").on("click", function () {
        showSection("myTemplate.html");
    });
});

这可能无法解决您使用 IE10 的问题,但它被认为是更好的做法......并且应该与所有浏览器保持一致。

其他一些建议:

与其使用.attr来设置 的onclick属性#settingsButton,不如on再次使用:

$("#settingsButton").on("click", function () {
    showSettingsMain();
});

虽然我不确定这是否会对问题产生任何影响。

attr尽管如此,这里是关于和prop- .prop() 与 .attr()之间区别的解释

此外,如果您需要准确指定要使用的 URL,即使是<div>逐个地,您也可以使用data-*属性。假设这是您的 HTML:

<div class="trigger-div" data-target-url="myTemplate.html"></div>
<div class="trigger-div" data-target-url="myTemplate2.html"></div>

然后你可以使用:

$(document).ready(function () {
    $(".trigger-div").on("click", function () {
        var $this = $(this);
        var target_url = $this.attr("data-target-url");  // or $this.data("target-url")
        showSection(target_url);
    });
});

单击第一个 div 将使用“myTemplate.html”,而单击第二个将使用“myTemplate2.html”。

这样,您的数据将嵌入到 HTML 中,而您的 Javascript 则不显眼。

于 2013-04-05T19:41:34.773 回答
0

您使用 jQuery 错误,这里:

首先,将事件绑定到 div,您需要为此添加一个类或 id:

<div id="myEvent"></div>

然后,绑定事件:

$('#myEvent').on('click', showSection( 'myTemplate.html') );

你的功能:

function showSection(loca) {
    $("#optionView").show();
    $("#bookMenu").hide();
    $("#optionView").load('settings/'+loca);    
}

试试这样。

于 2013-04-05T19:46:30.997 回答