Javascript做了预期的事情
每当按下按钮时,我都会动态地将带有javascript和jQuery的Javascript做了预期的事情,javascript,jquery,html,Javascript,Jquery,Html,每当按下按钮时,我都会动态地将带有javascript和jQuery的标记添加到我的html文件中。所有内容都正确添加,但只有两个中的一个。单击jQuery操作函数正在工作。我似乎不明白为什么。控制台中没有错误。我确保在正确的位置使用了\'和\' $('#classBox').append('<tr id=\"' + tempCHAR + tempNUM + '\">' + '<td>' + '&
标记添加到我的html文件中。所有内容都正确添加,但只有两个中的一个。单击jQuery操作函数正在工作。我似乎不明白为什么。控制台中没有错误。我确保在正确的位置使用了\'
和\'
$('#classBox').append('<tr id=\"' + tempCHAR + tempNUM + '\">'
+ '<td>'
+ '<i id=\"' + tempCHAR + tempNUM + '\" class=\"icon-remove-sign\">'
+ '</i> '
+ '<a id=\"' + tempCHAR + tempNUM + '\"" href=\"https://cms.psu.edu/section/default.asp?id=' + urlHOLDER + '\" target="framehidden">'
+ tempYEAR + ': ' + tempCHAR + tempNUM + ', Section ' + tempSEC
+ '</a>'
+ '</td>'
+ '</tr>'
+ '<script>'
+ '$(\'#' + tempCHAR + tempNUM + '\').click(function() {'
+ '$(\'tr\').remove(\'tr#' + tempCHAR + tempNUM + '\');'
+ '});'
+ '$(\'a#\'' + tempCHAR + tempNUM + ').click(function() {'
+ '$(\'#framehidden\').attr(\'src\', $(\'a\', this).attr(\'href\')));'
+ '});'
+ '</script>');
我还有30个其他的。单击这些功能都能很好地工作,但我就是不知道这里出了什么问题。有什么提示吗?您的错误(或至少其中一个)在这一行:
+ '$(\'a#\'' + tempCHAR + tempNUM + ').click(function() {'
只需在此处添加一个需要移动到$()
块末尾的单引号:
+ '$(\'a#' + tempCHAR + tempNUM + '\').click(function() {'
您的错误(或至少其中一个错误)位于此行:
+ '$(\'a#\'' + tempCHAR + tempNUM + ').click(function() {'
只需在此处添加一个需要移动到$()
块末尾的单引号:
+ '$(\'a#' + tempCHAR + tempNUM + '\').click(function() {'
在最后的示例中,您有$('a#IST130)
。非常确定应该是$('a#IST130
)`
要更正此错误,请将该ID的生成更改为:
'$(\'a#' + tempCHAR + tempNUM + '\')...
此外,由于您正在动态添加元素,因此它们的单击事件可能无法正确绑定,具体取决于代码的执行时间
您可以使用为永久元素上的事件设置绑定。在这种情况下,#classBox
看起来是一个不错的选择。它可能看起来像这样(在普通脚本块内部和动态内容外部:
$('#classBox').on('click','a',function () {
$('#framehidden').attr('src', $('a', this).attr('href')));
});
$('#classBox').on('click',function () {
$(this).closest('tr').remove();
});
注意:完全未经测试-用作指南!在您的示例末尾,您有$('a#IST130)
。非常确定应该是$('a#IST130
)`
要更正此错误,请将该ID的生成更改为:
'$(\'a#' + tempCHAR + tempNUM + '\')...
此外,由于您正在动态添加元素,因此它们的单击事件可能无法正确绑定,具体取决于代码的执行时间
您可以使用为永久元素上的事件设置绑定。在这种情况下,#classBox
看起来是一个不错的选择。它可能看起来像这样(在普通脚本块内部和动态内容外部:
$('#classBox').on('click','a',function () {
$('#framehidden').attr('src', $('a', this).attr('href')));
});
$('#classBox').on('click',function () {
$(this).closest('tr').remove();
});
注意:完全未经测试-仅供参考!由于.append()
是即时的(即同步的),因此绝对不需要将这些内容放入
标记中。相反,请尝试以下操作:
$('#classBox').append('<tr id=\"' + tempCHAR + tempNUM + '\">'
+ '<td>'
+ '<i id=\"' + tempCHAR + tempNUM + '\" class=\"icon-remove-sign\">'
+ '</i> '
+ '<a id=\"' + tempCHAR + tempNUM + '\"" href=\"https://cms.psu.edu/section/default.asp?id=' + urlHOLDER + '\" target="framehidden">'
+ tempYEAR + ': ' + tempCHAR + tempNUM + ', Section ' + tempSEC
+ '</a>'
+ '</td>'
+ '</tr>');
$('#' + tempCHAR + tempNUM).click(function() {
$('tr').remove('tr#' + tempCHAR + tempNUM);
});
$('a#' + tempCHAR + tempNUM).click(function() {
$('#framehidden').attr('src', $('a', this).attr('href')));
});
$('#classBox')。追加(''
+ ''
+ ''
+ ' '
+ ''
+ ''
+ '');
$(“#”+tempCHAR+tempNUM)。单击(函数(){
$('tr')。删除('tr#'+tempCHAR+tempNUM);
});
$('a#'+tempCHAR+tempNUM)。单击(函数(){
$('#framehidden').attr('src',$('a',this.attr('href'));
});
话虽如此,您的代码严重无效。ID必须是唯一的。我会让您以最适合您的方式来解决这个问题,但是是的。因为.append()
是即时的(即同步的),所以绝对没有必要将这些内容放入
标记中。相反,请尝试以下方法:
$('#classBox').append('<tr id=\"' + tempCHAR + tempNUM + '\">'
+ '<td>'
+ '<i id=\"' + tempCHAR + tempNUM + '\" class=\"icon-remove-sign\">'
+ '</i> '
+ '<a id=\"' + tempCHAR + tempNUM + '\"" href=\"https://cms.psu.edu/section/default.asp?id=' + urlHOLDER + '\" target="framehidden">'
+ tempYEAR + ': ' + tempCHAR + tempNUM + ', Section ' + tempSEC
+ '</a>'
+ '</td>'
+ '</tr>');
$('#' + tempCHAR + tempNUM).click(function() {
$('tr').remove('tr#' + tempCHAR + tempNUM);
});
$('a#' + tempCHAR + tempNUM).click(function() {
$('#framehidden').attr('src', $('a', this).attr('href')));
});
$('#classBox')。追加(''
+ ''
+ ''
+ ' '
+ ''
+ ''
+ '');
$(“#”+tempCHAR+tempNUM)。单击(函数(){
$('tr')。删除('tr#'+tempCHAR+tempNUM);
});
$('a#'+tempCHAR+tempNUM)。单击(函数(){
$('#framehidden').attr('src',$('a',this.attr('href'));
});
也就是说,您的代码非常无效。ID必须是唯一的。我将让您以最适合您的方式来修复它,但是是的。在修复语法错误之后,还要确保在append()
代码运行之前没有附加单击事件
我无法判断代码在实际页面中的运行顺序-如果您在附加click事件之前附加元素,则元素可能还不存在。您可以使用jQuery的delegate
方法确保为所有元素调用事件,无论它们何时附加到DOM
例如:
$('body').delegate('.anchorClassName','click',function(e){});
修复语法错误后,还要确保在运行append()
代码之前没有附加单击事件
我无法判断代码在实际页面中的运行顺序-如果您在附加click事件之前附加元素,则元素可能还不存在。您可以使用jQuery的delegate
方法确保为所有元素调用事件,无论它们何时附加到DOM
例如:
$('body').delegate('.anchorClassName','click',function(e){});
ID必须是唯一的。此外,您在这里有一个输入错误:$('a#'IST130)
考虑修改您的解决方案,使其仅附加HTML内容,并在附加HTML内容后动态应用触发器,而不是附加脚本标记。无需按您的方式附加脚本。在主脚本块中使用事件委派:$(文档)。在('click',selector,function()){…
ID必须是唯一的。此外,这里还有一个输入错误:$('a#'IST130)
考虑修改您的解决方案,使其仅附加HTML内容,并在附加HTML内容后动态应用触发器,而不是附加脚本标记。无需按您的方式附加脚本。在主脚本块中使用事件委派:$(文档)。在('click',selector,function()){…
是的,这是我以前修复过的。我的javascript修复程序中有两个部分,但我只处理了一个。一定是复制了错误的部分。是的,这是我以前修复过的。我的javascript修复程序中有两个部分,但我只处理了一个。一定是复制了错误的部分。这非常有效。我修复了一个c两个错误,然后使ID唯一,现在它像微风一样工作。谢谢!这非常有效。我修复了几个错误,然后使ID唯一,现在它像微风一样工作