2012-06-26 4 views
0

Я некоторый HTML код, сгенерированный в JavaScript, как этотФункция этот параметр на OnClick

cell.innerHTML = '<a href="#" class="sortheader" id="sortheader_'+i+'" '+ 
     'onclick="ts_resortTable(this, '+i+');return false;">' + 
     txt+'<span class="sortarrow"></span></a>'; 

Я хотел бы вызвать функцию ts_resortTable(), но независимо от события OnClick, как я могу генерировать «это "параметр функции?

Я пытаюсь сделать это

ts_resortTable.call(document.getElementById('sortheader_'+i), i); 

и это

ts_resortTable(document.getElementById('sortheader_'+i), i); 

Но это не работает

функция, которую я пытаюсь назвать это:

function ts_resortTable(lnk,clid) { 

    //save clid in cookies 
    $.cookie("clid", clid); 

    //fade to table 
    $('#table8k6k_progress').before('<div id="loading" style="background: #fff; position: absolute; margin-top: -25px; padding: 3px 5px; font-weight: bold;">Loading...</div>'); 
    $('#table8k6k_progress').fadeTo('fast',0.5, function() { 
     TIMERSTART = (new Date()).getTime(); 
     // get the span 
     var span; 
     for (var ci=0;ci<lnk.childNodes.length;ci++) { 
      if (lnk.childNodes[ci].tagName && lnk.childNodes[ci].tagName.toLowerCase() == 'span') span = lnk.childNodes[ci]; 
     } 
     var spantext = ts_getInnerText(span); 
     var td = lnk.parentNode; 
     var column = clid || td.cellIndex; 
     var table = getParent(td,'TABLE'); 

     // Work out a type for the column 
     if (table.rows.length <= 1) return; 
     var itm = ts_getInnerText(table.rows[1].cells[column]); 
     //itm = itm.substr(0,7); 
     sortfn = ts_sort_caseinsensitive; 
     if (itm.match(/^\d{1,2}[\/-]\d{1,2}[\/-]\d{2,4}\s\d\d\W\d\d$/)) sortfn = ts_sort_date; 
     if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d\d\d$/)) sortfn = ts_sort_date; 
     if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d$/)) sortfn = ts_sort_date; 
     if (itm.match(/^[£$]/)) sortfn = ts_sort_currency; 
     if (itm.match(/^[\d\.]+$/)) sortfn = ts_sort_numeric; 
     SORT_COLUMN_INDEX = column; 
     var firstRow = new Array(); 
     var newRows = new Array(); 
     for (i=0;i<table.rows[0].length;i++) { firstRow[i] = table.rows[0][i]; } 
     for (j=1;j<table.rows.length;j++) { newRows[j-1] = table.rows[j]; } 

     newRows.sort(sortfn); 

     if (span.getAttribute("sortdir") == 'down') { 
      ARROW = stIsIE ? '&nbsp<font face="webdings">6</font>' : '&nbsp;&#x25BE;'; 
      newRows.reverse(); 
      span.setAttribute('sortdir','up'); 
     } else { 
      ARROW = stIsIE ? '&nbsp<font face="webdings">5</font>' : '&nbsp;&#x25B4;'; 
      span.setAttribute('sortdir','down'); 
     } 

     // We appendChild rows that already exist to the tbody, so it moves them rather than creating new ones 
     // don't do sortbottom rows 
     for (i=0;i<newRows.length;i++) { if (!newRows[i].className || (newRows[i].className && (newRows[i].className.indexOf('sortbottom') == -1))) table.tBodies[0].appendChild(newRows[i]);} 
     // do sortbottom rows only 
     for (i=0;i<newRows.length;i++) { if (newRows[i].className && (newRows[i].className.indexOf('sortbottom') != -1)) table.tBodies[0].appendChild(newRows[i]);} 

     // Delete any other arrows there may be showing 
     var allspans = document.getElementsByTagName("span"); 
     for (var ci=0;ci<allspans.length;ci++) { 
      if (allspans[ci].className == 'sortarrow') { 
       if (getParent(allspans[ci],"table") == getParent(lnk,"table")) { // in the same table as us? 
        allspans[ci].innerHTML = ''; 
       } 
      } 
     } 

     span.innerHTML = ARROW; 

     //fadeTo 
     $('#table8k6k_progress').fadeTo('fast', 1); 

     //remove div loading 
     $('#loading').remove(); 
    }); 


    //alert("Time taken: " + ((new Date()).getTime() - TIMERSTART) + "ms"); 

} 
+1

'document.getElementById ('sortheader _' + i)' должен работать; можете ли вы показать нам, что вы пытаетесь? – Matt

+0

Спасибо, Мэтт, я попробовал, может быть, я пропустил что-то, я попробую еще раз;) –

+0

Вы имеете в виду, что вы хотите, чтобы 'this' указывал на '#sort_headeri'? внутри ts_resortTable? –

ответ

0

document.getElementById («sortheader _» + я)

связь с идентификатором еще не генерируют, когда я запускал функцию на событие готовности документа. Таким образом, решение было отложить запуск функции;)

0

Основываясь на вы набрали

$('sortheader_' + i) 

Поскольку это не MooTools, вам нужно сделать это для селектора.

$('#sortheader_' + i) 

Вам нужно использовать селектор CSS в jQuery.

+0

'this' будет тогда объектом jQuery, а не' HTMLElement'. – Matt

+0

@Matt этот код ранее не включал jQuery, поэтому я так не думаю;) –

+0

@Jerome: Извините, я имел в виду, что код Michaels сделает этот объект jQuery, а не код уже существующим. – Matt

0

Позвонив

onclick="ts_resortTable(this, '+i+'); 

Первый параметр функции ts_resortTable будет <a> тег itelf

1

Для вызова функции и явным образом контролировать то, что this будет внутри функции, используйте call метод работы функции

ts_resortTable.call(document.getElementById('sortheader_'+i), i) 
  • Вышеуказанное будет устанавливать this на document.getElementById ('sortheader _' + i) внутри функции.
  • функция также будет получать один параметр, i
+0

ok, я попробую это! –

+0

не работает, я собираюсь сделать jsfiddle –

Смежные вопросы