Điểm:-3

Làm cách nào để đọc thuộc tính phần tử từ $form_state?

lá cờ in

Tôi đang cố ẩn id thực thể khỏi các trường tự động hoàn thành của mình. Tôi đã tải xuống một tập lệnh jquery để xóa id trong ngoặc và cập nhật phần tử tự động hoàn thành bằng phần tử mới. Sau đó, nó ghi toàn bộ giá trị vào dữ liệu của phần tử như thế này

$(event.target).data('real-value','6');

Tôi thậm chí đã cập nhật điều này để sử dụng attr thay vì dữ liệu, tôi không thể đọc thông tin này từ Drupal form_state của mình.

Tôi đặt thuộc tính dữ liệu trên phần tử tự động hoàn thành của mình bằng cách sử dụng jquery như thế này

$(event.target).attr('real-value','6');

Làm cách nào để tôi nhận được giá trị này từ đối tượng $formstate hoặc $form trong hàm gửi biểu mẫu của mình? sử dụng dpm($form['elementname']) thậm chí không hiển thị thuộc tính này.

tôi đã thử $formstate->getValue(). Không hoạt động?

Đây là kịch bản tôi đang sử dụng ...

ẩn id tự động hoàn thành jquery

Chỉ tự hỏi tại sao jquery thay đổi thành công giá trị của hộp văn bản tự động hoàn thành, nhưng không thể thay đổi một thuộc tính trên cùng một phần tử?

lá cờ id
Vì JavaScript đã thêm thuộc tính nên tôi không thấy hệ thống Biểu mẫu của Drupal sẽ biết về nó như thế nào.
ilechcod avatar
lá cờ in
Cảm ơn Cilefen. Nhưng tôi cũng đã thử thêm thuộc tính vào phần tử biểu mẫu bằng Drupal `'#attributes => ['test']` và sau đó thử thay đổi giá trị thuộc tính trong jquery. Nhưng formstate vẫn trả về 'kiểm tra' làm giá trị.
lá cờ id
Nếu bạn đã thử điều này với mã khác thì đó là một câu hỏi khác. Ngoài ra, thuộc tính dữ liệu không phải là thuộc tính dữ liệu nếu chúng không bắt đầu bằng `data-`. https://developer.mozilla.org/en-US/docs/Learn/HTML/Howto/Use_data_attributes
Điểm:1
lá cờ id

Điều này là không thể như đã viết. Hệ thống Biểu mẫu của Drupal không có thông tin về các thuộc tính chỉ được thêm bởi JavaScript.

Hệ thống Form của Drupal không có thông tin về các thuộc tính sửa đổi chỉ bằng JavaScript.

ilechcod avatar
lá cờ in
Cảm ơn Cilefen, nhưng điều này rõ ràng không giúp được gì cho tôi cả. Tôi cần biết cách sửa đổi các thuộc tính phần tử biểu mẫu hiện có và đọc nó từ Drupal 8. Xét cho cùng, ajax thường được sử dụng để thay thế giá trị trường văn bản bằng jquery. Xin vui lòng làm thế nào tôi có thể đạt được kết quả này?
ilechcod avatar
lá cờ in
Câu trả lời của bạn không chỉ cho tôi đi đúng hướng về cách đạt được mục tiêu của mình.
apaderno avatar
lá cờ us
Câu trả lời này đúng: Trong Drupal, AJAX được sử dụng trong một biểu mẫu vẫn liên quan đến mã PHP. PHP sẽ không biết về một thuộc tính được thêm bởi mã JavaScript.
lá cờ id
Câu hỏi hỏi cách thực hiện điều này với JavaScript theo một cách cụ thể. Tôi đã trả lời đúng là không thể. Đặt một câu hỏi khác cho một câu trả lời khác. Tôi không biết bạn đang thực sự cố gắng làm gì.
lá cờ id
Tôi chỉ đoán thôi nhưng bạn có thể cần API Ajax https://www.drupal.org/docs/drupal-apis/javascript-api/ajax-forms
ilechcod avatar
lá cờ in
Cảm ơn Cilefen.Tôi đã cập nhật câu hỏi để hiển thị chính xác những gì tôi đang cố gắng thực hiện. Ngoài ra, tôi không thể làm điều này bằng Chosen Ajax vì tôi đang sử dụng Drupal 8. Cảm ơn
lá cờ cn
@ilechcod có vẻ như về cơ bản bạn có thể đang hiểu sai về cách biểu mẫu HTML hoạt động - tất cả những gì có thể được gửi là giá trị hiện tại của phần tử đầu vào, các thuộc tính tùy ý như thuộc tính bạn đang thêm sẽ không bao giờ được gửi. Tất nhiên, bạn có thể làm bất cứ điều gì bạn muốn với JS để thao tác các giá trị trước khi chúng được gửi đi, nhưng một trình duyệt đang hoạt động sẽ không bao giờ cố gắng gửi các thuộc tính đến hành động biểu mẫu
ilechcod avatar
lá cờ in
@Clive - nói cách khác, không thể lưu trữ thứ gì đó trên thuộc tính phần tử hiện có bằng cách sử dụng jquery và sau đó đọc thuộc tính từ hệ thống biểu mẫu Drupal. Đúng. Vì vậy, cách nào khác tôi có thể đạt được mục đích của mình? Tôi biết tôi có thể kích hoạt một sự kiện ajax từ tính năng tự động hoàn tất, đặt giá trị cho thuộc tính bằng cách sử dụng lệnh invivo và sau đó trả về một ajaxrespose. Nhưng tôi chỉ cảm thấy sẽ tốt hơn nếu đặt thuộc tính của tính năng tự động hoàn thành ở cùng một vị trí Giá trị của nó đã được đặt - trong trình xử lý lựa chọn. Đó là mã sạch hơn. Vậy bạn nghĩ như thế nào? Cảm ơn
lá cờ cn
Một cách tiếp cận là thêm một trường ẩn (`'#type' => 'hidden'`) và đặt giá trị của nó bằng JS. Điều đó sẽ được chọn trong quá trình gửi biểu mẫu

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.