JS не работает в IE, но работает на FF ..... с сообщением об ошибке inner.html .. поэтому хочу конвертировать в формат jquery - PullRequest
0 голосов
/ 28 февраля 2010

Почему этот javascript отлично работает в Firefox, но не в IE 6 и 7 (еще не проверен в IE8)?

ошибка inner.html. Может ли любой эксперт jquery преобразовать весь этот код в jquery? , поскольку я уже использую jquery на том же сайте для других целей.

function twoDecPlaces(theValue) {
var nm = new Number( Math.round( theValue * 100 ) ) /100 ;
 var parts = nm.toString().split( '.' );
 var ord = new Number( parts[ 0 ] );
 var dec = ( parts[ 1 ] ) ? parts[ 1 ] : '';
 if( dec ){
  dec = dec.toString().substring( 0, 2 );
  ord += '.' + dec;
 }

 return( ord );

}

function fourDecPlaces(theValue) {
num = theValue;
result = num.toFixed(4); 

 return( result );

}

function isNumber(val)
{
 if (isNaN(val))
 {
  return false;
 }
 if (val==0)
 {
  return false;
 }
 else
 {
  return true;
 } 
}


function doCalc()
{
 if (isNumber(document.getElementById("num_shares").value))
 {
  var dividend_rate = document.getElementById('dividend_rate');
  var currency = document.getElementById('currency').value;
  var dividendValue = dividend_rate.options[dividend_rate.selectedIndex].value;
  var num_shares = document.getElementById('num_shares');

  num_shares = parseInt(num_shares.value);

  var totalDividend = dividendValue * num_shares;
  var valuePaid = document.getElementById('valuePaid');
  var divpershare = document.getElementById('divpershare');

  divpersharevalue = fourDecPlaces(dividendValue/1000);
  divpersharevalue = divpersharevalue + " " + currency;

  totalDividend = twoDecPlaces(totalDividend/100);
  totalDividend = totalDividend + " " + currency;

     valuePaid.style.display="";
  divpershare.style.display="";
  valuePaid.innerHTML = "<td>The total dividend paid was:</td><td align='right'>"+totalDividend+"</td>";
  divpershare.innerHTML = "<td>The dividend per share was:</td><td align='right'>"+divpersharevalue+"</td>";
 }
else
 {
  alert("Invalid entry in dividend box");
  document.getElementById("num_shares").value="";
  document.getElementById('valuePaid').innerHTML=""; 
 }
}

Может ли любой эксперт jquery преобразовать весь этот код в jquery?

Ответы [ 2 ]

1 голос
/ 28 февраля 2010

Вот некоторые вещи, которые я заметил:

  • Я не уверен, почему вы используете два разных метода, один для twoDecPlaces, а другой для fourDecPlaces.
  • Вам не нужно вставлять ячейки таблицы с данными для отображения результатов. Я бы просто поместил текст в таблицу (но скрытый), поэтому вам нужно только обновить значение.

Вот как я бы изменил таблицу результатов (включая CSS):

<style type="text/css">
.text, .val { display: none; }
</style>
<table>
<tr id="valuePaid"><td class="text">The total dividend paid was:</td><td class="val"></td></tr>
<tr id="divpershare"><td class="text">The dividend per share was:</td><td class="val"></td></tr>
</table>

И это будет ваш скрипт для работы с вышеупомянутым HTMl. Это было очищено и jQuerified:)

function twoDecPlaces(theValue) {
 return theValue.toFixed(2);
}
function fourDecPlaces(theValue) {
 return theValue.toFixed(4);
}
function isNumber(val) {
 if (isNaN(val) || val == 0) { return false; }
 return true;
}
function doCalc(){
 if (isNumber($('#num_shares').val())) {
  var currency = $('#currency').val();
  var dividendValue = $('#dividend_rate').val();
  var num_shares = parseInt($('#num_shares').val(),10);
  var divpersharevalue = fourDecPlaces(dividendValue/1000) + "&nbsp;" + currency;
  var totalDividend = twoDecPlaces((dividendValue * num_shares)/100) + "&nbsp;" + currency;
  $('#valuePaid').find('.val').html(totalDividend);
  $('#divpershare').find('.val').html(divpersharevalue);
  $('.text, .val').show();
 } else {
  alert("Invalid entry in dividend box");
  $('#num_shares').val('');
  $('.text').hide();
  $('.val').empty();
 }
}

Если вы хотите ограничить поле ввода, чтобы в него можно было вводить только цифры, есть несколько доступных плагинов jQuery. Вот тот, который называется Числовой .

1 голос
/ 28 февраля 2010

Internet Explorer очень плохо редактирует innerHTML элементов table, thead, tbody и tr.

Либо используйте стандартную DOM, замените всю таблицу или замените содержимое отдельных ячеек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...