2009-12-16 3 views
1

Прошу прощения за мое незнание Я не очень хорошо знаком с Javascript и мне было поручено ремонтировать ошибку разработчика больше не в компании.Не работает JavaScript-код Onclick в IE

Onclick отлично работает в FireFox, однако в IE 7 & 8 (единственные, на что мы тестируем), он, как представляется, запускается через функции onclick правильно, а затем вместо данных, передаваемых в URL формы в goStep3 (), он проходит через каждый onclick на странице, с 'href = "#"' и затем отправляет неверную информацию, поскольку переменная была перезаписана 50 раз.

<a href="#" onclick="trackSponsor(62, 64265); goStep3(1896, 64265, 0); return false;">view</a> 

EDIT: Когда я бегу trackSponsor(62, 64265); goStep3(1896, 64265, 0); return false; в Инструменты разработчика в IE8 я получаю ошибку возвращения ложных вне зависимости .... удаление, что он работает просто отлично.

ли линия, что я верю, что вызывает проблемы

trackSponsor() работает правильно и возвращает false

goStep3() довольно большая функция работает она, извлекая значения от 4 других функций в , присвоение значения к URL в пределах theAction

Это завершает функцию EDIT:

var yr = $("#find-yr").attr('value'); 
var me = $("#find-me").attr('value'); 
var mo = $("#find-mo").attr('value'); 
var keywords = $("#find-keywords").attr('value'); 
var theAction = PATH_BASE+'find/step3/'+p_term+'/'+p_id+'/'+p_l_id+'/'; 

document.forms['FindForm'].action = theAction; 
document.FindForm.submit(); 
return true; 

Я попытался вернуть false из этой функции, а также изменить document.FindForm.submit() на «правильный» синтаксис document.forms['FindForm'].submit(), и он все еще не отправляет, пока не пропустит все другие «onclick» на странице.

Заранее благодарен!

Примечания:

JQuery используется как хорошо.

Javascript не делает ошибок.

Это отлично работает в FireFox

Я могу видеть, что это происходит через все другие функции, в других «OnClick это с помощью инструментов разработчика и пошаговой страницы не представляют результаты goStep3, пока он не прошел все другие функции onclick на странице.

+0

Если вы уменьшаете вашу функцию goStep3 вниз только в форме представления, что происходит? – Zoidberg

+0

отредактирован, чтобы включить эту информацию. Это похоже на то, что «onclick» каким-то образом запускает все «onclick» на всей странице ... – user103219

+1

Можете ли вы опубликовать больше кода из функции goStep3(). Я провел некоторое тестирование на основе кода, который вы здесь представили, и я не могу воспроизвести ваши результаты. Используете ли вы какие-либо фреймворки javascript, такие как jQuery или Prototype? –

ответ

0

Проблема была вызвана из-за того, как IE использует пузырь! Спасибо всем за вашу помощь, я включил решение для кода, которое будет размещено в goStep3().

var browserName = navigator.appName; 
if (browserName == "Microsoft Internet Explorer") { 
    window.event.cancelBubble = true;  
} 
+0

Полезно знать u нашел ответ :) –

0

Я бы начал с удаления "return false;" из события onClick, поскольку он действительно ничего не делает.

+3

Он останавливает ссылку на '#', после чего происходит переключение страницы и потенциальная остановка навигации. Он должен быть * оставлен. – bobince

+0

попробовал, чтобы это не произвело никакого эффекта. – user103219

+0

О, верно, это имеет смысл теперь, когда я думаю об этом. Ответ ниже, ссылаясь на «javascript: void (0)», решит это. –

0

попытка изменения

href="#" 

с

href='javascript:void(0)' . 
+0

Извините, это тоже не действует. – user103219

0

Я не могу точно сказать, где дела идут не так, но я отговорить используя атрибут одной из форм в name ссылаться на него, как вы сделали здесь:

document.forms['FindForm'].action = theAction; 
document.FindForm.submit(); 

Почему бы не попробовать следующий jQuery:

$("form:FindForm").action = theAction; 
$("form:FindForm").trigger("submit"); 

Вы также должны убедиться, что $("form:FindForm") действительно ссылается на желаемый элемент формы.

+0

Извините, я не написал код, мне только что поставили задачу исправить ошибку. Ваш метод возвращает «Object Expected» в файле query-1.2.3 и «Object не поддерживает это свойство или метод» в goStep3() – user103219

+0

Элемент формы не найден. Вы получаете эту ошибку, потому что вы не можете достигнуть '.action' отсутствующего объекта. Подумайте о том, чтобы дать элементу формы атрибут id и ссылаться на него таким образом. –

+0

ОК эта строка document.FindForm.submit(); используется несколько мест и работает. Фактически, форма

user103219

1

«разместить мой предыдущий комментарий как ответ»

я вижу много Jquery используется с селекторы атрибутов, поэтому плз проверить код против тех ..

EDIT:

Я заметил, что ур незнаком с Javascript .. так что в случае, если вы не знаете, селектор jQuery, выберет все теги, соответствующие определенному «селекторному фильтру», и выполнит определенное действие на них ... так что если есть селектор который выбирает все теги A с атрибутом href (или, возможно, еще один общий атрибут между ними ..), то это станет причиной вашей проблемы.

EDIT: -после Вы отправили ответ -

рад, что вы нашли ответ ..

хотя это Alittle werid, причина по вашему вопросу он проходит через «каждый элемент с HREF = «#» ..

Однако Согласно msdn, Event кипящей просто передает эти события необработанных для родительского элемента для обработки. не через «похожи» теги :)

о well..nothing логично, когда речь идет о IE

+0

Спасибо за это! – user103219

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