以下适用于IE 9.0.8以外的所有浏览器。它使用ajax请求在div中加载调查表单。
$('.tab-content').on('click', '.show_survey_form', function(e) {
e.preventDefault()
target = $(this).attr("data-target")
my_href = $(this).attr("href")
console.log("load: " + target + " target: " + my_href)
// load: #survey_response_form_33 target: /surveys/33/survey_responses/edit_multiple
// Don't make a request unless the form is opening.
if ($(this).hasClass('collapsed')) {
console.log("Making request!")
//$(target).load(my_href)
$(this).html(closeSurveyForm) // Just changes the language on the button
} else {
$(this).html(respondToSurvey) // Just changes the language on the button
}
}
.load在调试期间被注释掉了。 IE在这种情况下使用.hasClass似乎有问题。它在其他地方使用没有问题。
真正奇怪的是,当我打开开发工具窗口时,它开始工作。它在此之前始终不起作用,并且在击中F12之后始终有效。
其他问题表明当类包含\ r \ ncchar时,hasClass方法不起作用,但这不是这种情况。我正在使用jQuery 1.8.3。
更新:将href更改为“#”并将URL写入数据加载无效。仍然适用于除IE 9.0.8之外的所有浏览器。
答案 0 :(得分:12)
这与jQuery或hasClass()
无关。这完全取决于您使用console.log()
。
重要的是要知道在F12开发工具窗口打开之前,IE不会定义console
对象。
这意味着在打开它之前,console
调用将抛出javascript“object undefined”错误。这将使它看起来周围的代码不起作用,但实际上只是控制台对象丢失的事实。
您可能在其他较旧的浏览器中有类似的效果,但大多数当前的浏览器版本不会这样做 - 它们会立即定义console
对象,无论开发工具是否打开。 IE是唯一的例外。
您可以通过(a)不使用console
解决此问题,除非您实际调试并打开开发工具,或者(b)向您的所有{{1}添加if(console)
检查调用。这样可以防止错误。
此处提供更多信息:Why does JavaScript only work after opening developer tools in IE once?