jQuery не работает с runat= " сервер"

мой код ниже работает нормально при использовании в HTML. Тот же код, который я попытался поместить в форму, и он перестал работать. Как исправить эту проблему?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<script src="jquery-1.7.1.min.js" ></script>
<title>Chat scroll test</title>
<style type="text/css">
#chat
{
    width: 200px;
    height: 200px;
    border: 1px solid black;
    overflow-y: auto;
}
</style>
<script>
    jQuery(document).ready(function ($) {
        monitor = function () {
            var $this = $(this),
        wrap = $this.find('.wrapper'),
        height = $this.height(),
        maxScroll = wrap.height() - height,
        top = $this.scrollTop();
            if (maxScroll === top) {
                $this.addClass('atBottom');
            } else {
                $this.removeClass('atBottom');
            }
        }
        window.setInterval(function () {
            monitor.call($('#chat').get(0));
        }, 350);
        $('#chat').bind('addMessage', function (e, message) {
            var $this = $(this),
        top = $this.scrollTop(),
        scroll = $this.hasClass('atBottom');
            $this.find('.wrapper').append(message);
            if (scroll) {
                var wrap = $this.find('.wrapper'),
            height = $this.height(),
            maxScroll = wrap.height() - height
                $this.scrollTop(maxScroll);
            }
        })
        $('button').click(function () {
            $('#chat').trigger('addMessage', 'asdgagasdg<br/>');
        });
    });
</script>
</head>

<body>
<form id="form1" runat="server">
<div id="chat">
    <div class="wrapper">
        adsgasgda<br/>
        adsgasg<br/>
        asd<br/>
        adsgasgda<br/>
        adsgasg<br/>
        adsgasgda<br/>
        adsgasg<br/>
        adsgasgda<br/>
        adsgasg<br/>
        adsgasgda<br/>
        adsgasg<br/>
        adsgasgda<br/>
        adsgasg<br/>
        adsgasgda<br/>
        adsgasg<br/>
    </div>
</div>
<button>Add a line</button>
</form>
</body>
</html>

когда тег формы удаляется, он снова начинает работать.

3 ответов


когда у вас есть внутри a автоматически отправляет форму. Заменить

<button>Add a line</button>

С

<input type="button" value="Add a line" /> 

и таким образом браузер не публикует форму, когда она нажата.

не забудьте также изменить селектор jQuery с

$('button').click(function () {

что-то вроде

$(':button').click(function () {

для .NET 4.0 добавить Статический ClientIDMode для тегов, чтобы появиться на стороне клиента, они появляются на стороне сервера.

что-то вроде

                  <form id="form1" runat="server" ClientIDMode="Static">

для старого .net используйте ' ' в коде jQuery / Javascript, когда вы ссылаетесь на элемент управления

что-то вроде

                 '<%= form1.ClientID %>'

подсказка: посмотрите на идентификаторы кода в окончательном HTML.

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