Nhận giá trị tên thuộc tính của <input>


134

Cách lấy giá trị tên thuộc tính của thẻ đầu vào bằng jQuery. Xin vui lòng giúp đỡ.

<input name='xxxxx' value=1>

Câu trả lời:


270

Cung cấp cho ID đầu vào của bạn và sử dụng attrphương thức:

var name = $("#id").attr("name");

33

Sử dụng attrphương thức của jQuery như thế này:

alert($('input').attr('name'));

Lưu ý rằng bạn cũng có thể sử dụng attrđể đặt các giá trị thuộc tính bằng cách chỉ định đối số thứ hai:

$('input').attr('name', 'new_name')

18
var value_input = $("input[name*='xxxx']").val();

Bài đăng này đang được tự động gắn cờ là chất lượng thấp vì nó quá ngắn / chỉ mã. Bạn có muốn mở rộng nó bằng cách thêm một số văn bản để giải thích cách giải quyết vấn đề không?
gung - Hồi phục lại

2
Nó thực sự không giải quyết được vấn đề. OP muốn lấy giá trị tên; điều này giả định rằng bạn đã biết nó.
felwithe

16

Mặc dù không thể phủ nhận rằng jQuery là một công cụ mạnh mẽ, nhưng việc sử dụng nó cho một hoạt động tầm thường như "lấy giá trị thuộc tính của một phần tử" là một ý tưởng thực sự tồi tệ.

Đánh giá theo câu trả lời được chấp nhận hiện tại, tôi sẽ giả định rằng bạn có thể thêm thuộc tính ID vào thành phần của mình và sử dụng thuộc tính đó để chọn nó.

Với ý nghĩ đó, đây là hai đoạn mã. Đầu tiên, mã được cung cấp cho bạn trong Câu trả lời được chấp nhận:

$("#ID").attr("name");

Và thứ hai, phiên bản Vanilla JS của nó:

document.getElementById('ID').getAttribute("name");

Kết quả của tôi:

  • jQuery: 300k thao tác / giây
  • JavaScript: 11.000k thao tác / giây

Bạn có thể tự kiểm tra tại đây . Phiên bản "JavaScript đơn giản" nhanh hơn 35 lần so với phiên bản jQuery.

Bây giờ, đó chỉ là một thao tác, theo thời gian, bạn sẽ có ngày càng nhiều thứ đang diễn ra trong mã của mình. Có lẽ đối với một cái gì đó đặc biệt tiên tiến, giải pháp "JavaScript thuần" tối ưu sẽ mất một giây để chạy. Phiên bản jQuery có thể mất 30 giây đến cả phút! Nó thật khổng lồ! Mọi người sẽ không ngồi xung quanh vì điều đó. Ngay cả trình duyệt cũng sẽ chán và cung cấp cho bạn tùy chọn để giết trang web vì mất quá nhiều thời gian!

Như tôi đã nói, jQuery là một công cụ mạnh mẽ, nhưng nó không nên được coi là câu trả lời cho mọi thứ .


Câu trả lời hay, tôi đã kiểm tra chéo để javascript nhanh hơn jquery phải không?
Rijo

Bạn đã trả lời câu hỏi này 4 năm sau khi câu hỏi được hỏi và bạn không trả lời câu hỏi. Người hỏi làm thế nào để làm điều đó trong jQuery. Tùy thuộc vào việc lập trình viên sử dụng jQuery hay Vanilla JS và nằm ngoài phạm vi của câu hỏi
Zachary Weixelbaum

Vanilla JS! ?? Đùa thôi, tôi đã dành nửa giờ để nghiên cứu về việc hack Vanilla JS là gì.
Basheer AL-MOMani

Có lẽ nhà phát triển không biết. Tôi đã nhận thức được thực tế rằng các khung như jQuery gây ra một số chi phí. Nhưng tôi đã không mong đợi làm chậm các tác vụ đơn giản như vậy trong nhân tố 35 khi sử dụng jQuery ...
Daniel

7

Bạn cần phải viết một bộ chọn trong đó chọn đúng <input>trước. Lý tưởng nhất là bạn sử dụng ID của phần tử $('#element_id'), không biết ID của phần chứa của nó $('#container_id input')hoặc lớp của phần tử $('input.class_name').

Phần tử của bạn không có cái nào trong số này và không có ngữ cảnh, vì vậy thật khó để cho bạn biết cách chọn nó.

Khi bạn đã tìm ra bộ chọn thích hợp, bạn sẽ sử dụng phương thức attr để truy cập các thuộc tính của phần tử. Để có được tên, bạn sẽ sử dụng $(selector).attr('name')cái sẽ trả về (trong ví dụ của bạn) 'xxxxx'.


5

Một cách tốt hơn có thể là sử dụng 'cái này', nó lấy bất cứ tên nào của 'id' và sử dụng nó. Miễn là bạn thêm tên lớp gọi là 'mytarget'.

Bất cứ khi nào bất kỳ trường nào có mục tiêu thay đổi thì nó sẽ hiển thị một hộp cảnh báo với tên của trường đó. Chỉ cần cắt và qua toàn bộ kịch bản cho nó hoạt động!

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js" type="text/javascript"></script>
<script>
$(document).ready(function() {
 $('.mytarget').change(function() {
var name1 = $(this).attr("name");
alert(name1);
 });
});
</script>

Name: <input type="text" name="myname" id="myname" class="mytarget"><br />
Age: <input type="text" name="myage" id="myage" class="mytarget"><br />

1
var theName;

theName = $("input selector goes here").attr("name");

1

sử dụng giá trị nhận tên đầu vào

 $('input[value="1"]').attr('name');

sử dụng id nhận tên đầu vào

 $('input[class="id"]').attr('name');
   $('#id').attr('name');

sử dụng lớp nhận tên đầu vào

 $('input[value="classname"]').attr('name');
   $('.classname').attr('name');  //if classname have unique value

0

Nếu bạn đang xử lý một yếu tố duy nhất, tốt nhất là bạn nên sử dụng idbộ chọn như đã nêu trong câu trả lời GenericTypeTea và lấy tên như thế nào $("#id").attr("name");.

Nhưng nếu bạn muốn, như tôi đã làm khi tôi tìm thấy câu hỏi này, một danh sách với tất cả các tên đầu vào của một lớp cụ thể (trong ví dụ của tôi là một danh sách với tên của tất cả các hộp kiểm không được kiểm tra với .selectable-checkboxlớp), bạn có thể làm một cái gì đó như:

var listOfUnchecked = $('.selectable-checkbox:unchecked').toArray().map(x=>x.name);

hoặc là

var listOfUnchecked = [];
$('.selectable-checkbox:unchecked').each(function () {
    listOfUnchecked.push($(this).attr('name'));
});

0

Truyền lớp cho thẻ đầu vào và truy cập giá trị tên bằng cách sử dụng lớp.

<input class="test-class" name='xxxxx' value=1>

<script>
    $('.test-class').attr('name');
</script>

Hoặc bạn cũng có thể truy cập giá trị bằng id.

<input id="test-id" name='xxxxx' value=1>

<script>
    $('#test-id').attr('name');
</script>

-2

Đối với dòng dưới đây, Ban đầu phải đối mặt với vấn đề với việc đưa ra một mã duy nhất mà 'currentnetRowAppName'value không chiếm không gian với chuỗi. Vì vậy, sau khi đưa ra mã duy nhất '"+row.applicationName+"', nó cũng chiếm không gian.

Thí dụ:

<button class='btn btn-primary btn-xs appDelete' type='button' currnetRowAppName='"+row.applicationName+"' id="+row.id+ >

var viewAppNAME = $(this).attr("currnetRowAppName");
alert(viewAppNAME)

Điều này đang làm việc tốt.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.