JavaScript href onclick не работает с Perl - PullRequest
0 голосов
/ 25 марта 2011

Ниже мой код.Все мои функции кнопок работают отлично, но если я щелкаю по ссылке, щелкаю значение сервера и запоминаю страницу, а затем снова загружаю страницу с параметрами view и subsys.

Но значение для сервера пустокогда я перезагружаюсь.

my $server = $q->param('server') ;
my $unit = $q->param('unit') ;

my $bfile = __FILE__ ;
$bfile = `basename $bfile` ;
chomp $bfile ;

print "<form name=\"form1\" action =\"/cgi-bin/$bfile\" onsubmit=\"javascript:onsubmitform(doc_press)\">";

print "<input type=\"hidden\" name=\"server\" id=\"server\">";
print "<input type=\"hidden\" name=\"unit\" id=\"unit\">";
print "\n\n<input type=submit name=view value=\"View\" onClick=\"doc_press=this.value\">";
print "<input type=submit name=save value=\"Save\" onClick=\"doc_press=this.value\">";

print $var{$a}."<a href=\"/cgi-bin/$bfile?view=5&SUBSYS=$subsys\" onClick=javascript:click_page(\"$_\")>CLICK</a>\n" ;

print <<"END_OF_SCRIPT";
<script type="text/javascript">
function onsubmitform(doc_press) {
        if (doc_press == "View"){
                document.getElementById('unit').value="$unit";
        }
        else if (doc_press == "Save") {
END_OF_SCRIPT
             var x = "$user=$val";
             document.cookie=x;
             document.getElementById('unit').value="$unit";
        }
        if (document.getElementById('HTTP_TYPE').value == "post") {
                document.form1.method='post';
        }
        else if(document.getElementById('HTTP_TYPE').value == "get") {
                document.form1.method='get';
        }
}

function click_page(server){
        document.getElementById('server').value=server;
}
</script>
END

1 Ответ

1 голос
/ 25 марта 2011

Когда вы нажимаете на ссылку (<a href="..."/>), браузер отправляет новый запрос GET для данной ссылки, независимо от того, какие формы у вас могут быть.Это означает, что ваша форма НЕ отправлена;поэтому любое значение в форме будет потеряно.По этой причине ваш обработчик onclick, опубликованный здесь, бесполезен.

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

Если вы хотите нажать на ссылку, чтобы отправить форму, вы должны либо) используйте кнопку или б) измените обработчик onclick для отправки формы и возврата false (чтобы ссылка не переходила):

function click_page(server){
    document.getElementById('server').value=server;
    document.forms[0].submit();
    return false;
}

Для правильной работы также измените объявление onclick:

<a href="..." onclick="return click_page('$_')">CLICK</a>
...