2011-01-27 4 views
2

В настоящее время я создаю сайт с использованием ASP.Net MVC 1 и используя файл javascript this, чтобы заменить переключатели по умолчанию на изображения. Я использую переключатели для переключения между двумя формами с помощью jQuery .toggle.IE7 не вызывает javascript onclick

Это прекрасно работает в Firefox, Chrome, Safari и IE8, но вообще не работает в IE7. Однако, если я проверяю код с помощью инструментов разработчика IE и добавляю пространство в метод onclick во время выполнения, он работает.

Я понятия не имею, почему это так, я пробовал различные комбинации jQuery, обычный javascript, используя return false; и многие изменения в этом бесполезны.

Если кто-то может пролить свет, это было бы очень признательно. Соответствующий код ниже.

Javascript:

var inputs = document.getElementsByTagName("input"), span = Array(), textnode, option, active; 

    for (a = 0; a < inputs.length; a++) { 
     if (inputs[a].type == "radio" && inputs[a].className == "styled") { 
      span[a] = document.createElement("span"); 

      span[a].className = inputs[a].type; 
      span[a].setAttribute("onclick", inputs[a].getAttributeNode("onclick").nodeValue); 
      if (inputs[a].checked == true) { 
       position = "0 -" + (radioHeight * 2) + "px"; 
       span[a].style.backgroundPosition = position; 
      } 
      inputs[a].parentNode.insertBefore(span[a], inputs[a]); 
      inputs[a].onchange = Custom.clear; 
      if (!inputs[a].getAttribute("disabled")) { 
       span[a].onmousedown = Custom.pushed; 
       span[a].onmouseup = Custom.check; 
      } else { 
       span[a].className = span[a].className += " disabled"; 
      } 
     } 
    } 

Код:

<%=Html.RadioButton("rbCustomerSelect", true,Model.IsNewCustomer.GetValueOrDefault(false),new { id="NewCustomerRadioButton", @class="styled", onclick="ShowNewCustomerForm(true);" })%> 

Который визуализируется как:

<span class="radio" style="background-position: 0px -50px;" onclick="ShowNewCustomerForm(true);"/> 
+0

Есть ли ошибка JavaScript, брошенная, когда вы щелкаете по радио перед добавлением пробела? Возможно, во время интерпретации? Следующий очевидный вопрос: почему бы просто не вернуть серверные интервалы вместо входных данных? –

+0

Ошибок javascript на всех. По крайней мере, никто не поймал. – Steve

ответ

1

Вы сказали, что вы были с помощью JQuery, поэтому я рекомендую привязки к событию щелчка, когда DOM загружен, и тэг span был создан из радиообмена. Красота jQuery заключается в том, что он пытается поддерживать уровень соответствия в разных реализациях javascript.

Попробуйте избавиться от параметра onclick и измените javascript так, чтобы он дал сгенерированные интервалы id. Добавьте следующую строку:

span[a].className = inputs[a].type; 
span[a].id = inputs[a].id + "-span"; 

Затем использовать этот JavaScript для привязки к событию щелчка после пролета генерируется

$(function(){ 
    $("#NewCustomerRadioButton-span").click(function(){ShowNewCustomerForm(true)}); 
}) 

Возможно IE7 не правильно регистрация пяди как DOM элемент, но использование jQuery для привязки к событию клика должно исправить это.

+2

В вашем примере вы бы попытались присвоить результат «ShowNewCustomerForm (true)» как обработчик кликов, а не сама функция. Оберните его: '.click (function() {ShowNewCustomerForm (true);})' или назначьте его как ссылку на функцию: '.click (ShowNewCustomerForm)'. –

+0

Это хороший ответ, и мне интересно узнать, почему @Steve использует событие onclick - где, очевидно, у него хороший дескриптор функции jQuery. Я предпочитаю использовать onclicks там, где это возможно, поскольку это помогает ремонтопригодности пучка (зная, какие методы кликов привязаны к каким элементам. – Russell

+0

извините, это должно исправить, спасибо @Ken :) – ndbroadbent

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