Javascript做了预期的事情

Javascript做了预期的事情,javascript,jquery,html,Javascript,Jquery,Html,每当按下按钮时,我都会动态地将带有javascript和jQuery的标记添加到我的html文件中。所有内容都正确添加,但只有两个中的一个。单击jQuery操作函数正在工作。我似乎不明白为什么。控制台中没有错误。我确保在正确的位置使用了\'和\' $('#classBox').append('<tr id=\"' + tempCHAR + tempNUM + '\">' + '<td>' + '&

每当按下按钮时,我都会动态地将带有javascript和jQuery的
标记添加到我的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唯一,现在它像微风一样工作