AJAX etkin form gönderme düğmesini tıklatma programlı olarak nasıl başlatılır?


25

Programlı olarak (jQuery ile) AJAX davranışı ile Drupal formunda bir düğmeye basmaya çalışıyorum, ancak şu ana kadar jQuery('#edit-submit').click()hiçbir şey yapmıyor.

Bir gerçek fare tıklayın amaçlandığı gibi o düğme eserleri. Nasıl çalıştıracağına dair bir fikrin var mı?


Bir # düzenleme-gönder düğmesiyse, sadece $ ('form') yapamazsınız.
— cam8001 20:11

Bu da benim için işe yaramadı. Formu AJAX olmayan bir şekilde gönderir veya hiçbir şey yapmaz, form oluşturucudaki bazı ayarlara bağlıdır.
— Daniel

Yanıtlar:


40

jQuery('#edit-submit').mousedown() - görünüşe göre büyük bir fark var.


3
benim için çalışmıyor
— ram4nd

Bu çözüm benim için çalıştı. Düğmeye tıklamak ajax çağrısını gerçekleştirdi, ancak .click () veya varyasyonları .mousedown () mükemmel bir şekilde işe yaramadı.
— Eric Goodwin

Kimlik seçiciyi form elemanlarında kullanmaktan kaçınırdım. AJAX geri çağırma sırasında form yeniden oluşturulursa, tüm öğelerin kimlikleri değişecek ve jQuery seçiciniz artık çalışmayacaktır.
— Yuriy Babenko

Aynen Eric'in söylediği gibi. Neden fark olduğunu bilmek istiyorum ... cidden, bu mantıklı gelmiyor gibi görünüyor.
— Johnathan Elmore

@JohnathanElmore mousedown(), bir click()olayın mouseup()gerçekleştiği zaman tamamlanan sadece "ilk kısım" dır . Bir bağlantıya tıkladığınızda ve ardından fareyi bağlantı alanının dışına bıraktığınızda, click()genellikle kovulmaz ve bağlantı izlenmez. Muhtemelen bir ajax çağrısı mouseup()kovulmasını engeller , ama bu sadece bir tahmin ...
— pamatt

7

Aslında, tahmin etmeye gerek yok.

Drupal davranışlarını kullanmalısın

Drupal.behaviors.yourFunctionName = {
    attach:function (context, settings) {

       // Your code goes here....

    }
}

Bu, ayarların ajax özelliğine erişmenizi sağlar,

Drupal.behaviors.yourFunctionName = {
    attach:function (context, settings) {

       console.log(settings.ajax);

    }
}

Yapılandırmanıza bağlı olarak, geri arama işlevinin adı, seçicinin kimliği ve triggering olayının adı gibi çeşitli özelliklere sahip tetikleyici öğelerin bir listesini görmelisiniz.

Etkinliğinizi tetiklemek için ilgili bilgileri kullanabilirsiniz.

// $(selector).trigger(eventName);
// for example...
$('#edit-product-id-15', context ).trigger('change');

2
Bu cevabı beğendim, çünkü Drupal projesi üzerinde çalışan Drupal dışı geliştiriciler için oluşturulmuş öğelerle nasıl bir araya getirileceğini keşfetmek için ilginç bir teknik sunuyor. +1
— Lester Peabody

6

Aşağıdaki gibi bir ajax gönder oluşturun.

 $form['button'] = array(
    '#type' => 'button',
    '#value' => 'Click',
    '#ajax' => array(
      'callback' => '_kf_reading_user_points',
      'wrapper' => 'reading-user-points',
      'method' => 'replace',
      'event' => 'click',
    ),
  );

function _kf_reading_user_points(&$form, &$form_state) {
  // Something within the callback function.
}

Sonra jquery .click () olayı drupal ajax formunda çalışır.


Ben de ne zaman denemek, geri arama işlevi olmayacak, örnek geri çağırma işlevini de gönderebilir misin
— Crazyrubixfan 10:16

1
Geri arama işlevi :) eklendi
— Leopathu


3

Benim durumumda, yukarıda önerilen çözümler benim için işe yaramadı, ancak .mousedown () ifadesi benim için çalışan aşağıdaki fikre yol açtı (Drupal 7):

$('#custom-submit-button').click(function() {
  $('#ajax-submit-button').trigger('mousedown');
});

Bu altında Formu API Başvurusu olduğu "neden" hakkında bazı yararlı arka plan bilgileri var #ajax_prevent


Click () sarıcısına ihtiyacım yoktu, ama ajax ile olan bağlantıyı KEY oldu!
— Ryan Hartman

2

Daha İyi Açığa Çıkan Filtreler modülüne bakıldığında, $ (. Ctools-auto-send-click ') bularak ve bir tıklamayı tıklayarak AJAX formunu gönderirler.

<?php
// ... near line 190 of better_exposed_filters.js

// Click the auto submit button.
$(this).parents('form').find('.ctools-auto-submit-click').click();
?>

click olayı benim için çalıştı, ancak mousedown olayı olmadı.
— aross

0

submitOlayı formda tetiklemelisin . Clickve mousedowndüğmelerdeki olaylar çalışmıyor.


İlk başta denedim ve doğru çalışıyor gibi görünmüyor. Buraya nasıl geldim.
— Kasım'da
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.