[英]JS works in FF but not in IE
我是JS新手。 我已经完成了2个简单的函数来更改输入按钮的值和onclick-event。
function doAjaxRequest(url, divID, buttonID) {
$(divID).html('<img src="images/loader.gif" />');
setTimeout(function(){ $(divID).load(url); }, 600);
setTimeout(function(){ $(buttonID).attr({
value: 'Schliessen',
onClick: 'clear_div(\''+url+'\', '+divID.id+', '+buttonID.id+')'
});}, 600);
};
function clear_div(url, divID, buttonID) {
$(divID).empty();
$(buttonID).attr({
value: 'Mehr...',
onClick: 'doAjaxRequest(\''+url+'\', '+divID.id+', '+buttonID.id+')'
});
};
函数调用是
<div id="div1"></div>
<input type="button" id="button1" onClick="doAjaxRequest('test.html', div1, button1);" value="More..."/>
我用于首页的文档类型是
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
这些功能都可以在IE中正常工作,但在FF中,只有当我将doctype设置为时,它们才能工作
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
我也尝试了“ loose.dtd”,但没有任何效果。
JS我在做什么错? 希望可以有人帮帮我。
乔乔
问题可能在于onClick
应该是onclick
(在XHTML中,属性是重要的)。 但是有两个问题。
在您的标记中:
<input type="button" id="button1" onClick="doAjaxRequest('test.html', div1, button1);" value="More..."/>
您没有在div1
或button1
周围加上引号,这意味着您依赖浏览器将这些符号转储到全局名称空间中,因为它们是元素的ID。 这是相当普遍的(IE和其他一些工具也可以做到),但不是普遍的。 相反,我会传递字符串,然后正确地查找它们。
由于您使用的是jQuery,因此没有理由(也有一些理由不使用) onclick
属性。
所以:
function doAjaxRequest(url, divID, buttonID) { $('#' + divID).html('<img src="images/loader.gif" />'); setTimeout(function(){ $('#' + divID).load(url); }, 600); setTimeout(function(){ $('#' + buttonID) .attr({value: 'Schliessen'}) .click(function() { clear_div(url, divID, buttonID); }); }, 600); } function clear_div(url, divID, buttonID) { $('#' + divID).empty(); $('#' + buttonID) .attr({value: 'Mehr...'}) .unbind('click') .click(function() { doAjaxRequest(url, divID, buttonID); }); }
同样,您的按钮连接本来应该是:
$("#button1").click(function() { doAjaxRequest('test.html', 'div1', 'button1'); });
...而不是在HTML中使用onclick
。 该代码需要显示在 HTML中的按钮之后 (通常建议将script
标签放在文档底部 ,紧接在</body>
标签之前),或者可以将其包装在jQuery ready
处理程序中:
jQuery(function($) { $("#button1").click(function() { doAjaxRequest('test.html', 'div1', 'button1'); }); });
...因此它仅在DOM已加载时运行。
笔记:
click
处理程序之前,我们将使用unbind
删除所有以前的click
处理程序。 最后:我认为我可能只是让点击处理程序根据某个标志更改其行为,而不是删除旧的click
处理程序并放入新的点击处理程序。
我不确定这是否是导致您出现问题的原因,但是您对doAjaxRequest的参数对我来说很有趣,其方式如下:我不确定所有浏览器都将某个元素公开为以该元素的ID命名的全局变量。 如果这样做,我会更确定您的代码是正确的:
onClick="doAjaxRequest('test.html', '#div1', '#button1');"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.