2011-04-20 46 views
0

我有一個ASP.NET的DropDownList稱爲#ddlDateRange包含幾個項目。在下拉列表可能的值是:jQuery的失效鏈接,從下拉列表

Year - Current 
Year - Previous 
Year - Custom 

我有兩個文本框稱爲txtStartDate和txtEndDate填充有基於什麼用戶從下拉菜單中選擇值。 (即txtStartDate = '01-01-2010'和txtEndDate = '12-31-2010'),如果用戶選擇年份 - 上一個。

我也有兩個日曆控件的文本框的右側。這些jQuery的日曆控件允許最終用戶可以選擇自定義日期範圍IF他們選擇自定義日期。該頁面的jquery部分是:

 $("#<%#ddlDateRange.ClientID%>").blur(function() { 
      var value = $('#<%#ddlDateRange.ClientID%>').val(); 
      var lowerCaseValue = value.toLowerCase(); 

      if (lowerCaseValue.indexOf('custom') > -1) { 
       alert('You selected custom date range: ' + lowerCaseValue); 
       // enable the calendar controls      
      } else { 
       alert('You DID NOT select a custom date range: ' + lowerCaseValue); 
       // disable the calendar controls 
       // .dp-choose-date 
       $("a").click(function(e) { 
        alert('howdy!'); 
        e.preventDefault(); 
       }); 
      } 
     }); 

該代碼在else塊中正常工作。我想禁用具有「dp-choose-date」類的錨標記。

<div class="caption">Start Date:</div> 
<div class="dateCell"> 
    <input name="ctl00$Tabs$Panel1$txtStartDate" type="text" 
      id="ctl00_Tabs_Panel1_txtStartDate" class="date-pick" 
      style="width:125px;" /> 
    <a href="#" class="dp-choose-date" title="Choose date">Choose date</a> 
</div> 
<br /> 

我知道我可以使用的preventDefault上的超鏈接,當點擊,以防止默認動作,但警報(「你好」)當我嘗試在Firebug調試永遠不會被解僱了。我認爲原因是下拉失去,因爲我沒有點擊鏈接右邊後集中這是有意義的。

所以我的問題是,我該如何禁用鏈接?我也試過:

$("a .dp-choose-date").click(function(e) { 
    alert('Howdy!'); 
    e.preventDefault(); 
}); 

作爲我的選擇。但我仍然可以點擊我不想要的鏈接。在呈現的標記中,文本框中使用的類「date-pick」生成具有「dp-choose-date」屬性的錨標記,所以我不確定是否可以切換此類。

如果任何人有任何建議,我所有的耳朵...

回答

0

我的建議是做這樣的事情:

 
var blurred = true 
$("#").focus(function(){ 
    blurred = false; 
}); 
$("#").blur(function() { 
    var value = $('#').val(); 
    var lowerCaseValue = value.toLowerCase(); 

    if (lowerCaseValue.indexOf('custom') > -1) { 
     alert('You selected custom date range: ' + lowerCaseValue); 
     // enable the calendar controls      
    } else { 
     alert('You DID NOT select a custom date range: ' + lowerCaseValue); 
     // disable the calendar controls 
     // .dp-choose-date 
     blurred = true; 
    } 
}); 

$("a.dp-choose-date").click(function(e) { 
    if (blurred){ 
     alert('howdy!'); 
     e.preventDefault(); 
    } 
}); 
 

現在每次有重點的損耗時間要添加一個click事件的一個標籤。這不僅是不必要的,而且會在用戶與頁面交互時導致性能問題。

+0

您的代碼不,不是因爲你生產什麼工作。這更多的是由於我沒有完全理解出現在其旁邊的底層日曆彈出窗口。然而,你確實給我提供了足夠的啓發,我確實得到了與工作非常相似的東西,所以無論如何我會給你信用的。 – coson 2011-04-20 20:12:32

+0

很高興知道......我仍然將點擊處理程序帶出模糊事件,因爲我的答案中提到了問題 – locrizak 2011-04-20 20:14:16

0

只需卸下HREF attribue這樣的:

$("a.dp-choose-date").attr({"href":""}); 

而且代碼:

$("a .dp-choose-date").click(function(e) { 
    alert('Howdy!'); 
    e.preventDefault(); 
}); 

它應該是a.dp-choose-date而不是a .dp-choose-date請注意,元素和類名之間不能有空格。