2011-09-28 2 views
0

프로젝트 용 제어판을 개발 중이며 일부 코드와 충돌이 있습니다. 나는 모든 링크가 요청 된 페이지의 내용을 DIV에 삽입 할 수 있도록 일부 jQuery를 실행 중이다. 이 코드는 index.php 페이지에 있습니다. 그래서 어떤 페이지가 먼저 실행될 것입니다. 실제로 색인에서 벗어나지 않습니다.jQuery - ".load"함수가 호출 될 때마다 jQuery 스크립트를 실행 하시겠습니까?

$('a').live("click",function(){ 
var external = $(this).attr('class'); 
if (external == "externalLink") { 
return true; 
} 
var page = $(this).attr('href'); 
if (!(page == "#") && (page)) { 
    $("#loading").fadeToggle("fast", "linear"); 
    $("#split-view-right #content").load(page, function(){ 
     var parentHeader = $("#split-view-right #content #parentHeader").html(); 
     $("#split-view-right #header").html(parentHeader); 
     $("#loading").fadeToggle("fast", "linear"); 
    }); 
} 
return false; 
}); 

#header에는 일부 버튼을 포함하여 몇 가지 코드가 들어 있습니다. 그 중 일부는 페이지에 링크 만하면 좋지만 스크립트를 실행해야하는 경우도 있습니다. 이 페이지 중 하나에서 실행할 스크립트를 정의하려고하면 '.live'로 실행하지 않으면 단추를 찾지 못합니다. 그 문제는 라이브 스크립트를 실행 한 후에 다른 페이지로 이동하려고 할 때 하이퍼 링크를 무시하고 해당 코드를 다시 실행한다는 것입니다. 실행할 코드 샘플을 보냅니다. (더 나은 솔루션이없는 한) 나는 시도하고 싶으면 무엇

$(function() { 
$("#headerbutton").live('click', function() { 
    $("#loading").fadeToggle("fast", "linear"); 
    var title = $("input#title").val(); 
    var partnum = $("input#partnum").val(); 
    var descript = $("textarea#descript").val();  
    var startprice = $("input#startprice").val(); 
    var minprice = $("input#minprice").val(); 
    var domship = $("input#domship").val(); 
    var intship = $("input#intship").val(); 
    var startdate = $("input#startdate").val(); 
    var droprate = $("input#droprate").val(); 
    var dataString = 'title='+title+'&partnum='+partnum+'&descript='+descript+'&startprice='+startprice+'&minprice='+minprice+'&domship='+domship+'&intship='+intship+'&startdate='+startdate+'&droprate='+droprate;  
    $.post("savenewproduct.php", 
    { "title": title, "partnum": partnum, "descript": descript, "startprice": startprice, "minprice": minprice, "domship": domship, "intship": intship, "startdate": startdate, "droprate": droprate },  
    function(postdata){ 
     $("#split-view-right #content").load('upload_images.php?id=' + postdata.newID, function(){ 
      var parentHeader = $("#split-view-right #content #parentHeader").html(); 
      $("#split-view-right #header").html(parentHeader); 
      $("#loading").fadeToggle("fast", "linear"); 
     }); 
    }, "json"); 
    return false; 
}); 
}); 

그렇게 나는 '.load'를 실행할 때마다, 나는 상쇄하기 위해 '.die'스크립트를 실행할 수 있도록하는 것입니다 해당 페이지의 이전 라이브 코드.

아이디어가 있으십니까?

답변

1

귀하의 세부 사항을 충분히 이해했는지는 확실하지 않지만 여기에서 내가 취하는 바가 있습니다.

우선, 요구 사항이 아니라면 .one()이 여기에 저장 한 것으로 보입니다. .one()을 활용할 수 있도록 코드를 리팩토링 할 수 있다면 그럴 것입니다.

예외적으로, .die() 전화를 .load() 함수의 콜백에 붙여야하는 이유는 무엇입니까? 내가 볼 수있는 바로는, 당신의 코드는 기본적으로 : 효과적으로 #headerbutton.live() 핸들러를 상쇄 할

$('#headerbutton').live('click', function() { 
    // some stuff 
    $.post(foo, bar, function() { 
     $("#split-view-right #content").load(herp, function() { 
      // some stuff 
      // some more stuff 
      // ... 
      // what's stopping you from doing something like this: 

      $('#headerbutton').die('click'); 
     }); 
    }); 
}); 

. 이 도움이 아닌지하지만 당신은 시도 할 수 있습니다 사용하는 경우

+0

내가 그 일을 할 때 어떤 이유로 작동하지 않았습니다. 나는 그것을 클릭 한 다음에 실행할 첫 번째 작업으로 설정합니다.이 작업은 저에게 효과적입니다.나는 매번 그 비트를 넣는 것을 기억해야 할 것입니다. – Devin

+0

그래도 그렇게하면'.load()'호출이 실패하더라도'.die()'가 발생하기 때문에이를 명심하십시오. : D –

+0

괜찮습니다. 그것은 우리가 만든 웹 사이트에 내부적으로 사용되는 제어판입니다. 실패하면 왼쪽에있는 제품 탭을 클릭하면 단추가있는 곳으로 이동합니다. – Devin

1

이 먼저가, 다음 코드를 단순화 할 수있다 오프 : 당신이 스크립트를 포함하는 페이지를로드하는 경우

$('a').live("click",function(){ 
    var external = $(this).attr('class'); 
    if (external == "externalLink") { 
    return true; 
    } 
    ... 

는 지금까지 스크립트를 사용하여 부하 문제로

$('a:not(.external)').live("click",function(){ 
    ... 

이되고, 확인 스크립트는 항상 수정중인 요소 뒤에 있습니다. DOMReady 이벤트가 주 색인이로드 될 때 이미 트리거되었으므로 $(function(){});은 실제로 여기에서 도움이되지 않습니다.

1

확실하지를 사용합니다 :

$('a:not(.external)').live("click", function(e){ 
    e.preventDefault(); 
    .... 
} 

하는 브라우저가 기본적으로 링크를 따라가는 대신 코드를 대신 실행할 수 있습니다.

관련 문제