2016-09-06 4 views
-1

여러 개의 선택 목록 상자가 있습니다. 사용자가 3 개 이상의 값을 선택할 때 사용자를 제한하려고합니다. 값은 국가 또는 도시 일 수 있으며 데이터베이스에서 가져옵니다. 이 코드는 lstArea_SelectedIndexChanged 방법으로 작성되었습니다.목록 상자에서 선택한 값의 제한 설정

<asp:ListBox ID="lstArea" runat="server" SelectionMode="Multiple" OnSelectedIndexChanged="lstArea_SelectedIndexChanged" AutoPostBack="true"></asp:ListBox> 

동일한 유효성을 검사하기 위해 jquery 코드가 있지만 변경 기능이 작동하지 않습니다.

var limit = 3; 
    $("#<%=lstArea.ClientID%>").change(function() { 
     if ($(this).siblings(':checked').length >= limit) { 
      this.checked = false; 
     } 
    }); 
+1

"3 값보다 높습니다"는 질문에 포함되어 있지 않습니다. 제출하기 전에 질문을 끝내십시오. –

+0

"변경 기능이 작동하지 않습니다." if 문이 예상 한 것을 반환하지 않습니까? 아니면이게 네가 기대하는대로하지 않으면? – KSib

+0

@KSib 내가 이것을 디버깅 할 때, 컨트롤은 기능에 들어 가지 않습니다. –

답변

0

난 당신이 true에 재산 AutoPostBack를 설정하기 때문에이 주소는
https://stackoverflow.com/a/27490795/5631805 어쩌면 당신이해야하는 대신

if ($(this).siblings(':checked').length >= limit) 

if($('#lstArea:checked').length >= limit) 
0

의 도움이 될 수 있다고 생각하고 OnSelectedIndexChanged 이벤트 핸들러도 설정했습니다. 선택한 항목에 대해 onchange 속성을 생성합니다. 그러면 항목이 선택 될 때마다 POST가 다시 서버로 트리거됩니다. 이에 자바 스크립트 코드를 업데이트 또한

<asp:ListBox ID="lstArea" runat="server" SelectionMode="Multiple"/> 

과 :

// Handle for the list 
var list = $("#<%=lstArea.ClientID%>"); 

// Our limit 
var limit = 3; 

// Get currently selected values 
var selected = list.val(); 

// Handle change event 
list.change(function() { 
    // If we reached the limit 
    if (list.find(":checked").length >= limit) { 
     // Set the list value back to the previous ones 
     list.val(selected); 
     return; 
    } 

    // Postback to the server 
    setTimeout("__doPostBack('<%=lstArea.ClientID%>','')", 0); 
}); 

페이지가 렌더링 될 때마다이 selected 변수를 개최 당신이 당신의 .NET 코드를 변경해야한다는 것을 방지하기 위해 마지막으로 선택한 항목. change 처리기보다 모든 선택/검사 옵션을 가져 오며 새로 선택한 옵션의 개수가 제한보다 크거나 같으면 이전의 모든 값을 다시 설정하여 마지막으로 선택한 값의 선택을 취소합니다. 그리고 한도가 좋으면 .NET 함수 __doPostBack을 호출하여 포스트 백을 만듭니다.

관련 문제