Jquery-метод в .NET не выполняется - PullRequest
2 голосов
/ 11 апреля 2011

Я использую Visual Studio 2008 и .NET 3.5

Я создал метод javascript (window.unbeforeload) с помощью javascript, чтобы дать пользователям сообщение при попытке выйти из сайта.К сожалению, одно и то же сообщение отображается каждый раз, когда пользователь щелкает ссылку, которая не перенаправляет за пределы сайта.

Решение: позволить jquery обрабатывать все щелчки по ссылкам внутри сайта.Но это не работает.

 <asp:Content ID="ContentHead" ContentPlaceHolderID="head" runat="server">

    <script type="text/javascript" src="HTML/jquery.js"></script>
    <script type="text/javascript">    
     $(document).live('click',function() {
         $("a").click(function() {
             alert("Hello world!");
         });
     });                                       
    </script> 

// множество других функций

    <script type="text/javascript">
    window.onbeforeunload = function() {
          return "REALLY?"
      }
</script>
</asp:Content>

Здесь я попытался сделать любой щелчок по ссылке внутри сайта, чтобы создать предупреждение, но безуспешно.

Как заставить Jquery работать в моем приложении?

Sideinfo: я убедился, что файл jquery существует в HTML / jquery.js, но, несмотря на это,Visual Studio 2008 выдает предупреждение о том, что файл не найден.Другая страница .aspx с точно таким же путем к файлу jquery не выдает это предупреждение.

ОБНОВЛЕНИЕ:

    <%@ Page Language="C#" MasterPageFile="~/Manage/ConceptManager.Master" AutoEventWireup="true" CodeBehind="ConceptManager.aspx.cs" Inherits="DynamicForm.Manage.ConceptManagerPage" %>

<%@ Register src="Controls/Element_MetadataEditor_FieldNode.ascx" tagname="Element_MetadataEditor_FieldNode" tagprefix="uc1" %>

<%@ Register src="Controls/Element_MetadataEditor_TemplateNode.ascx" tagname="Element_MetadataEditor_TemplateNode" tagprefix="uc3" %>

<%@ Register src="Controls/CategoryAttributes.ascx" tagname="CategoryAttributes" tagprefix="usercontrol" %>

<%@ Register Src="Controls/ConfirmDialog.ascx" TagName="DeleteConfirmDialog" TagPrefix="usercontrol" %>
<%@ Register Src="Controls/ConfirmDialog.ascx" TagName="ConfirmDialog" TagPrefix="usercontrol" %>
<%@ Register src="Controls/AddReferenceDialog.ascx" TagName="AddReferenceDialog" TagPrefix="usercontrol" %>
<%@ Register src="Controls/AddIncludeDialog.ascx" TagName="AddIncludeDialog" TagPrefix="usercontrol" %>

<%@ Register Assembly="ExtExtenders" Namespace="ExtExtenders" TagPrefix="ExtExt" %>

<asp:Content ID="ContentHead" ContentPlaceHolderID="head" runat="server">
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
<script type="text/javascript">
    $(document).ready(function() {

        var mydomain = "mysite.com";
        var leavemessage = "Are you sure you wish to leave?";

        var filterMySitefunction = function(index) {
            return $(this).attr("href").indexOf(mydomain) > -1;
        }
        var filterOtherSitefunction = function(index) {
            return $(this).attr("href").indexOf(mydomain) == -1;
        }
        $("a").filter(filterMySitefunction).click(function() {
            window.onbeforeunload = function() { };
        });
        $("a").filter(filterOtherSitefunction).click(function() {
            window.onbeforeunload = function() {
                return leavemessage;
            };
        });
    });                                       
</script>  
</asp:Content>

Ответы [ 4 ]

5 голосов
/ 16 мая 2011

Я совершенно сбит с толку. Не обижайся на Питера выше, но это кажется слишком сложным решением, когда того же можно достичь, выполнив что-то вроде

$(function($){
    $('a').not('[href*="mydomain.com"]')
          .click(function(e){
              // visiting some other domain!
          });
});

Отличная книга jQuery: In Action также предлагает просто проверить на a[href^="http://"] проверку внешних ссылок, и именно так я бы настаивал на этом.

Лично (и потому что я немного параноидален с этим конкретным битом), я соединяю их вместе как своего рода ловушку (на случай, если кто-то или что-то добавит внутренний абсолют URL).

$('a[href^="http://"]').not('[href*="mydomain.com"]')
                       .click(function(e){
                           // visiting some other domain!
                       });
3 голосов
/ 11 апреля 2011
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
<script type="text/javascript">    
$(document).ready(function(){

    var mydomain = "mysite.com";
    var leavemessage = "Are you sure you wish to leave?";

    var filterMySitefunction = function(index) {
        return $(this).attr("href").indexOf(mydomain) > -1;
    }
    var filterOtherSitefunction = function(index) {
        return $(this).attr("href").indexOf(mydomain) == -1;
    }
    $("a").filter(filterMySitefunction).click(function() {
        window.onbeforeunload = function(){};
    });
    $("a").filter(filterOtherSitefunction).click(function() {
        window.onbeforeunload = function(){
            return leavemessage;
        };
    });
});                                       
</script>  

<a href="mysite.com">Omg</a>
<a href="othersite.com">Omg</a>

Рабочий пример: http://jsfiddle.net/peeter/K8cuE/

1 голос
/ 11 апреля 2011

Попробуйте изменить это:

$(document).live('click',function() {
     $("a").click(function() {
         alert("Hello world!");
     });
 });      

к этому:

$(document).ready(function() {
     $("a").click(function() {
         alert("Hello world!");
     });
 });      
0 голосов
/ 11 апреля 2011

Вам не нужен живой клик.

$(function() {
    $("a").click(function() {
         alert("Hello world!");
     });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...