2013-04-02 41 views
0

我動態地添加<script>標籤與javascript & jQuery插入我的HTML文件,每當按下按鈕。所有內容都正確添加,但兩個.click jQuery動作函數中只有一個正在工作。我似乎無法弄清楚爲什麼。控制檯沒有錯誤。我確定我在正確的地方使用了\'\"JavaScript做什麼預計

$('#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>'); 

縮進只是爲了我更容易閱讀我在做什麼。那不會是問題嗎?

如果這太不可能讀,那麼這裏是在正常的看法。

$('a#'IST130).click(function() { 
    $('#framehidden').attr('src', $('a', this).attr('href'))); 
}); 
$('#IST130').click(function() { 
    $('tr').remove('tr#IST130'); 
}); 

我有一個像其他30 .click功能,所有的工作完美,但我只是無法弄清楚到底是怎麼回事錯在這裏。任何提示?

+4

ID必須是唯一的。另外,這裏有一個拼寫錯誤:'$('a#'IST130)' –

+1

考慮修改您的解決方案,只添加HTML內容並在追加後動態應用觸發器,而不是附加腳本標記。 – Quantastical

+1

不需要像你那樣追加腳本。在你的主腳本塊中使用事件委託:'$(document).on('click',selector,function(){...' – Blazemonger

回答

2

由於.append()是即時的(即。同步),也絕對沒有必要把這些東西在<script>標籤相反,試試這個:。

$('#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'))); 
}); 

話雖這麼說,你的代碼是可怕的無效ID必須是唯一的,我會離開你。以最好的方式解決這個問題或者你,但是。

+0

這工作完美,我修復了一些錯誤,然後使ID的獨特,現在它像微風輕拂,謝謝! – pattmorter

2

你的錯誤(或者至少是其中之一)是在這條線:

+ '$(\'a#\'' + tempCHAR + tempNUM + ').click(function() {' 

只是有一個額外的單引號有需要被移動到$()塊的結尾:

+ '$(\'a#' + tempCHAR + tempNUM + '\').click(function() {' 
1

在你的例子中最後你有$('a#'IST130)。敢肯定,應閱讀$('a#IST130)`

要糾正它,改變了一代爲ID到:

'$(\'a#' + tempCHAR + tempNUM + '\')... 

此外,由於要動態添加的元素,他們的點擊事件可能無法正確地綁定,這取決於在你的代碼執行時。

您可以使用jquery on爲永久元素上的事件設置綁定。在這種情況下,#classBox看起來是一個不錯的選擇。它可能看起來像這樣(其中這將是一個正常的腳本塊內的動態的東西之外:

$('#classBox').on('click','a',function() { 
    $('#framehidden').attr('src', $('a', this).attr('href'))); 
}); 

$('#classBox').on('click',function() { 
    $(this).closest('tr').remove(); 
}); 

注:沒有經過充分測試 - 意爲指導

+0

是的,這是我之前修復的東西。但我只在一個工作,必須複製錯誤 – pattmorter

0

修復語法錯誤之後,請確保在append()代碼已運行之前沒有附加單擊事件。

我無法確定代碼在實際頁面中運行的順序 - 如果您在附加點擊事件之前追加元素,則元素可能還不存在。您可以使用jQuery的delegate方法來確保爲所有元素調用事件,而不管它們何時附加到DOM。

例如:

$('body').delegate('.anchorClassName', 'click', function(e){});