2017-09-11 15 views
12

Tôi đang cố gắng triển khai trình xác thực tùy chỉnh trong JavaScript cho trang vb.net của mình. Trình kiểm tra này nên kiểm tra xem trong một hộp danh sách đa ngôn ngữ có không có bất kỳ giá trị nào được chọn hay không, hiển thị lỗi xuất hiện nếu có.nhận tất cả các giá trị được chọn từ ListBox (phía máy khách)

Vấn đề là, tôi muốn thực hiện phía máy khách, nhưng trong hàm 'validateFunction' tôi chỉ nhận được mục được chọn cuối cùng (hoặc chưa được chọn, nếu nó đã được chọn). Tôi biết làm thế nào để làm điều đó trong code-behind code, nhưng tôi muốn làm điều đó phía client.

đang aspx:

<asp:ListBox ID="lbEdit" runat="server" SelectionMode="Multiple"> 
</asp:ListBox> 
<asp:CustomValidator id="cvEdit" runat="server" Display="None" ControlToValidate="lbEdit" ClientValidationFunction="validateFunction"/> 
<ajax:ValidatorCalloutExtender runat="server" ID="vceEdit" TargetControlID="cvEdit" /> 

mã JavaScript:

function validateFunction(source, arguments) { 
     var options = document.getElementById(source.controltovalidate).options; 
      for (var i = 0; i < options.length; i++) { 
       if (options[i].selected == true) { 
        args.IsValid = true; 
        return; 
       } 
      } 
      args.IsValid = false; 
} 

Như tôi đã nói, kể từ lần cuối (un) sản phẩm được chọn sẽ là người duy nhất được chọn trong 'lựa chọn' mảng, hàm xác thực sẽ luôn trả về đúng ...

Tôi nghĩ đến việc tạo một arra khác y trong một hàm javascript khác là 'mảng được chọn thực sự' và so sánh các giá trị của nó với tùy chọn đã chọn mỗi lần chức năng kích hoạt .. nhưng tôi nghĩ rằng nên có cách tốt hơn.

Vì vậy, ... Có cách nào để chuyển tiếp TẤT CẢ các mục đã chọn từ một hộp danh sách đa ngôn ngữ trong javascript không?

Trả lời

1
let a1 = [ 
{ 
    Selected:false, 
}, 
{ 
    Selected:false 
}, 
{ 
    Selected:false 
}]; 

nếu (a1.some (i => i.Selected)) console.log (true); else console.log (sai);

Có lẽ những gì bạn muốn

4

Câu hỏi của bạn là một chút không rõ ràng, và chức năng của bạn dường như làm việc, nhưng những gì tôi sẽ trả lời ở đây là phần cuối cùng của câu hỏi của bạn Vì vậy ... Có cách nào thẳng về phía trước để nhận được TẤT CẢ các mục đã chọn từ một hộp danh sách đa ngôn ngữ trong javascript?

Hãy thử điều này js chức năng

<script type="text/javascript"> 
     function validateFunction() { 
      var options = document.getElementById('<% = this.lbEdit.ClientID %>').options; 
      var selectedItems; 
      for (var i = 0; i < options.length; i++) { 
       if (options[i].selected == true) { 
        if (selectedItems) { 
         selectedItems = selectedItems + ";" + options[i].value; 
        } 
        else { 
         selectedItems = options[i].value; 
        } 
       } 
      } 
      if (selectedItems) { 
       alert(selectedItems); 
       return true; 
      } 
      else { 
       alert("No item was selected"); 
       return false; 
      } 
     } 
    </script> 

Và đây là đoạn code aspx, tôi loại bỏ các validator

<asp:ListBox ID="lbEdit" runat="server" SelectionMode="Multiple" > 
</asp:ListBox> 
    <asp:Button ID="test" runat="server" Text="send" OnClientClick="return validateFunction();"/> 

Trong các công cụ nhà phát triển của trình duyệt của bạn, bạn có thể thấy một thông tin chi tiết về tất cả các các thuộc tính của đối tượng của bạn

enter image description here

+0

Xin lỗi vì sự chậm trễ, tôi không có thời gian vì một dự án mới và khẩn cấp mà chúng tôi đã đến ... vẫn còn trên đó, ... Để phản hồi, có vẻ như mã của bạn không giống nhau như tôi, do đó, 'tùy chọn [i] .selected == true' chỉ sẽ kích hoạt một lần trong mã của tôi, với tùy chọn được nhấp cuối cùng ... Công cụ nhà phát triển của tôi không bao giờ đặt nhiều hơn một 'đã chọn = true'. Có lẽ tôi đã tuyên bố listbox một cách sai lầm? Tôi hy vọng có một thời gian còn lại vào thứ hai để xem xét thêm và có thể mở lại câu hỏi. Trong khi chờ đợi tôi không thể cung cấp cho bạn tiền thưởng, ít nhất là một upvote cho các nỗ lực, Cảm ơn !!! –

+0

Thực ra tôi nhận thấy nó sẽ là cùng một giải thưởng bạn hay không, như tôi đã đọc, vì vậy tiền thưởng cho bạn, bạn kiếm được nó. Mọi cách giải quyết của tôi sẽ tạo ra một mảng JavaScript và mỗi lần listbox.selected kích hoạt, chuyển đổi trạng thái chỉ mục đó (true <---> false) ... sẽ trở lại với tin tức tôi đoán;) –

Các vấn đề liên quan