Вернуть функцию Javascript в document.write ('<a href="">') - PullRequest
1 голос
/ 14 сентября 2011

У меня есть этот JavaScript:

document.write('<a HREF="javascript:return validateForm();' + thisform + '.submit();void(0);"');

У меня также есть следующая функция, ссылающаяся на форму на моем веб-сайте.

function validateForm()
{
var y=document.forms["myForm"]["email"].value;

if (y==null || y=="")    {
alert('Please enter your email to continue.');
return false;
    }
}

Теперь, как мне заставить это возвращение в HREF работать ?! Он не вернет false в случае, если вход равен "", а validateform () возвращает false.

Ответы [ 4 ]

2 голосов
/ 14 сентября 2011

Ваш код:

document.write('<a HREF="javascript:return validateForm();' +
  thisform + '.submit();void(0);"');

Кажется неполным.Если вы используете ссылку, то href должен ссылаться на полезный ресурс.Если нет, используйте кнопку или другой объект пользовательского интерфейса, который четко указывает, что произойдет.

Возврат false с использованием псевдопротокола javascript для атрибута href ничего не делает.Утверждение void вообще ничего не делает (в этом смысл void).Кроме того, void является оператором, поэтому нет необходимости включать оператор группировки ().

Вы не можете использовать такой элемент A, чтобы условно отправить форму, вам действительно следует использовать событие submit формы, чтобы условноразрешить или запретить отправку.Вы можете сделать:

document.write(
  '<a href="http://useful.com" onclick="return validateForm(' +
      thisform + ');">do stuff<\/a>');

Затем в функции validateForm вы можете условно вызвать метод отправки формы.

Если validateForm возвращаетfalse, браузер не будет переходить по ссылке.

Гораздо лучшая стратегия - поместить слушателя в форму:

<form onsubmit="return validateForm(...)" ...>

Если проверка не пройдена, вернуть false и отправка будет отменена.,В противном случае отправка будет продолжена.

1 голос
/ 14 сентября 2011

Для надлежащего контроля над отправкой формы у вас должно быть такое решение:

 document.write('<a href="#" onclick="submitMyForm(' + thisForm + ');"');

Тогда имейте эту функцию JS:

function submitMyForm(theForm) {
    var y = theForm["email"].value;

    if (y==null || y=="")    {
        alert('Please enter your email to continue.');
    } else {
        theForm.submit(); // will only submit the form if it's valid
    }
}
0 голосов
/ 14 сентября 2011

Я не знаю, почему вам не нужно возвращать функцию внутри href, но это действительно не рекомендуется.

Я не совсем отвечаю на ваш вопрос.Но я не могу понять, какая ситуация была бы действительно необходима, чтобы использовать ее вместо ОАП Javascript.

Я настоятельно рекомендую адаптировать ваш код таким не навязчивым образом.

Body:

<p><a href="#" id="myLink">Item 1</a></p>

Script

<script type="text/javascript">
var myFunction=function(){
    //do something
    alert('You clicked me!');
    alert('This function is inside '+this.innerHTML+' Link');

    this.style.backgroundColor='Yellow';
}

document.getElementById('myLink').onclick=myFunction;
</script>

Это не вызывает функцию напрямую, ссылка в памяти создается (как указатели в C) в виртуальной машине.и самый важный NONE EVAL используется, и он намного быстрее встроенного eval.

0 голосов
/ 14 сентября 2011

Почему у вас

alert("Not a valid e-mail address.");
document.location = "http://www.snarephoto.com/about/";
stopnow()
return false;

Я думаю, вы должны иметь только ..

alert("Not a valid e-mail address.");
return false;

Кроме того, что делает Stopnow в вашем случае?

...