.click() не работает. Jquery

В моем файле login.aspx я пытаюсь выполнить простую проверку на стороне клиента (проверьте, поля имени пользователя и пароля пусты или нет) одним нажатием кнопки. Но .click() в jquery не срабатывает. Где я ошибаюсь.

Примечание. У меня есть событие LoginButton_Click в коде, за которым есть некоторая функциональность.

<script src="Scripts/Login.js" type="text/javascript"></script>

 <td align="right" colspan="2">
     <asp:Button ID="LoginButton" runat="server"  Text="Log In" 
       onclick="LoginButton_Click" class ="validateForm" />
</td>

Мой файл login.js:

$(function () {

  $('#LoginButton').click(function () {

            var username = $('#txtUserName');
            var pwd = $('#txtPassword');
            if (username.val().length <= 0) {
                alert("User Name is required.");
                return false;
            }
            if (pwd.val().length <= 0) {
                alert("Password is required.");
                return false;
            }

        });
});

заранее спасибо

BB


person BumbleBee    schedule 14.10.2011    source источник
comment
это связано с С#???? Удалить тег C#...   -  person Enigma State    schedule 14.10.2011
comment
Если бы вы опубликовали то, что на самом деле видит браузер (после обработки сервером), а не ASP-версию своей страницы, могло бы помочь больше людей.   -  person jfriend00    schedule 14.10.2011
comment
@ jfriend00 оказывается, это также то, что видит браузер, потому что он неправильно использует теги asp.net в файле, не обработанном asp.net   -  person Andrew Barber    schedule 14.10.2011
comment
Используя механизм селекторов jQuery, у вас не должно возникнуть проблем с выбором элемента, подобного этому $(input[id$=LoginButton]), см. мой ответ ниже.   -  person Michael D. Irizarry    schedule 14.10.2011
comment
ты не собираешься принимать ни один ответ?   -  person Chamika Sandamal    schedule 18.10.2011


Ответы (5)


$("#<%= LoginButton.ClientID %>") не работает с внешними файлами JavaScript. Если вы хотите использовать внешний файл, создайте глобальную переменную в файле aspx и получите к ней доступ в файле JavaScript.


Изменить:

создать глобальную переменную в файле aspx.

var loginButtonId = <%= LoginButton.ClientID %>;

используйте его в файле JavaScript

$("#" + loginButtonId ).click(function () {...});

примечание: переменная должна быть объявлена ​​перед добавлением ссылки в файл JavaScript.

person Chamika Sandamal    schedule 14.10.2011
comment
Я изменил на $('#LoginButton').click(function () теперь я получаю ошибку времени выполнения Microsoft JScript: ожидается объект - person BumbleBee; 14.10.2011

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

$(function () {
  $("input[id$=LoginButton]").click(function () {

            var username = $("input[id$=txtUserName]");
            var pwd = $("input[id$=txtPassword]");
            if (username.val().length <= 0) {
                alert("User Name is required.");
                return false;
            }
            if (pwd.val().length <= 0) {
                alert("Password is required.");
                return false;
            }

        });
});
person Michael D. Irizarry    schedule 14.10.2011
comment
благодарю вас. я получаю сообщение об ошибке времени выполнения Microsoft JScript: ожидается объект. Я пробовал все решения, упомянутые здесь, но получаю ту же ошибку. - person BumbleBee; 15.10.2011
comment
Мой плохой забыл также выбрать элементы пользователя и пароля таким же образом. Попробуй это сейчас. - person Michael D. Irizarry; 15.10.2011

потому что в вашем файле .js javascript не смог прочитать значение этого: $("#<%= LoginButton.ClientID %>")
Вам необходимо: - Поместить этот код в конец вашей HTML-страницы.
ИЛИ
- Поместить фиксированный селектор в JS-файл

person Amr Elgarhy    schedule 14.10.2011

Я думаю, вам нужен onclientclick.

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.button.onclientclick.aspx

На всякий случай, если кто-то там заботится...

<script src="Scripts/Login.js" type="text/javascript"></script>

 <td align="right" colspan="2">
     <asp:Button ID="LoginButton" runat="server"  Text="Log In" 
       onclick="LoginButton_Click" onclientclick="validateLogin()" class ="validateForm" />
</td>

файл логин.js:

function validateLogin() {

            var username = $('#txtUserName');
            var pwd = $('#txtPassword');
            if (username.val().length <= 0) {
                alert("User Name is required.");
                return false;
            }
            if (pwd.val().length <= 0) {
                alert("Password is required.");
                return false;
            }

            return true;
}
person mikey    schedule 14.10.2011
comment
Не верно. Он пытается использовать jQuery для установки кода на стороне клиента. - person Andrew Barber; 14.10.2011
comment
Прекрасно ‹asp:Button ID=LoginButton runat=server Text=Log In onclick=LoginButton_Click class =validateForm ClientIDMode=Static /› и $(#LoginButton) вуаля - person mikey; 14.10.2011
comment
Я использую jQuery. Я не думаю, что мне нужно иметь OnClientClick - person BumbleBee; 14.10.2011
comment
Установите свой clientidmode, и все готово. msdn.microsoft.com/en-us/ библиотека/ - person mikey; 14.10.2011
comment
@mikey, это тоже не помогло. - person BumbleBee; 14.10.2011
comment
Какую версию .NET вы используете? - person mikey; 14.10.2011
comment
.net версии 4.0. я получаю сообщение об ошибке времени выполнения Microsoft JScript: ожидается объект - person BumbleBee; 15.10.2011

#LoginButton не существует. Когда кнопка asp обрабатывается, она преобразуется в специальный идентификатор, связанный с элементами управления ASP, которые содержат ее, например ctrl00_mycontrol_panelid_LoginButton. Чтобы перенести это во внешний файл, вам нужно использовать глобальную переменную:

var loginButtonID;
var txtUserNameID;
var txtPasswordID;

$(function () {

  $(loginButtonID).click(function () {

            var username = $(txtUserNameID);
            var pwd = $(txtPasswordID);
            if (username.val().length <= 0) {
                alert("User Name is required.");
                return false;
            }
            if (pwd.val().length <= 0) {
                alert("Password is required.");
                return false;
            }

        });
});

Затем в файле, который включает этот файл login.js, вам нужно установить эти переменные, вызвав:

<script type="text/javascript">

loginButtonID = '<%=LoginButton.ClientID%>';
txtUserNameID = '<%=txtUserName.ClientID%>';
txtPasswordID = '<%=txtPassword.ClientID%>';

</script>

Будьте осторожны, чтобы не объявить их заново с новыми модификаторами "var". Это может испортить масштаб и испортить ваш сценарий.

person Joel Etherton    schedule 14.10.2011
comment
благодарю вас. я получаю сообщение об ошибке времени выполнения Microsoft JScript: ожидается объект. - person BumbleBee; 15.10.2011
comment
@Bumblebee: это означает, что вы неправильно указали идентификатор клиента. Вы должны установить некоторые оповещения или использовать firebug, чтобы определить статус рассматриваемых переменных javascript. - person Joel Etherton; 15.10.2011