2015-09-23 11 views
2

У меня есть контактная форма (Drupal Webform), которая включает в себя загрузку файла, которая создает форму, содержащую эту разметку (в этом примере я разделил имя, размер и идентификатор attr):jQuery mousedown не работает над кнопкой отправки файла

<div class="form-managed-file"> 
    <input type="file" class="form-file"> 
    <input type="submit" value="Upload" class="form-submit ajax-processed"> 
    <input type="hidden" value="0"> 
</div> 

Я бы хотел, чтобы кнопка загрузки автоматически включалась при загрузке файла. Я делал это в прошлом, с помощью функции, как это, но он не работает на этом одном:

$('.webform-client-form').on('change', 'input.form-file', function() { 
    $(this).next('input[type="submit"]').mousedown(); 
}); 

Однако они работают в этой форме:

$('.webform-client-form').on('change', 'input.form-file', function(){ 
    $(this).next('input[type="submit"]').css("background", "red"); 
    alert($(this).next('input[type="submit"]').val()); 
}); 

Первый дает кнопку красным задний план. Второе предупреждение «Загрузить». Почему мышь не работает? Я также использовал click()trigger("click") и trigger("mousedown"), но ни один из них не нажимает кнопку загрузки. Я использую jQuery 1.10.

+0

Скорее попробуйте отправить форму на изменение? '$ ('. Webform-client-form'). On ('change', 'input.form-file', function() { // отправьте форму }); ' –

+0

Поскольку submit (появляется) отправляет только форму, вы можете напрямую вызвать' form.submit() '. –

+0

Поле загрузки является частью формы, которая также имеет несколько текстовых полей, поэтому я не хочу отправлять форму. У меня есть три разных поля файла, такие как выше в форме. Поэтому я не хочу отправлять форму, пока пользователь не нажмет кнопку отправки формы. Но если пользователь выбирает файл и не нажимает кнопку загрузки, файл не отправляется при отправке формы. Вот почему я хочу, чтобы она автоматически загружалась при выборе файла. – user2969934

ответ

0

Вы только запускаете mousedown. Кроме того, необходимо, чтобы захватить курок и действовать соответствующим образом, например:

$('.webform-client-form').on('mousedown', 'input[type="submit"]', function() { 
    alert ("mousedown"); 
}); 

Если я не ошибаюсь, что вы пытаетесь сделать, это отправить форму, когда .change срабатывает. Если это так, вы можете также отправить форму в пределах вашего .change обработчика, таких как:

$('.webform-client-form').on('change', 'input.form-file', function() { 
    $('.webform-client-form').submit(); 
}); 
+0

Но я не хочу отправлять форму, я хочу только имитировать щелчок по кнопке загрузки, чтобы убедиться, что файл загружен. – user2969934

+0

Затем используйте первый фрагмент кода из моего ответа. – lshettyl

+0

Но я не понимаю, как это мне поможет. Я хочу имитировать щелчок на кнопке и ничего больше. Я не хочу запускать какие-либо функции в клике, чтобы просто имитировать щелчок на кнопке. Обычно я делал это, используя $ (element) .click() или $ (element) .mousedown(). – user2969934

0

Собственно click() работает отлично:

$(this).next('input[type="submit"]').css("background", "red").click(); 

Вот fiddle.

+0

Но если вы помещаете предупреждение внутри щелчка в функции, оно не срабатывает. Так что css() работает, но он не нажимает: $ (this) .next ('input [type = "submit"]') .css («background», «red»). click (function() { \t alert ("test"); }); – user2969934

+0

Потому что таким образом вы привязываетесь и действуете к событию onClick, но не вызываете его. Здесь обновляется скрипт, где сначала 'alert()' привязывается к событию onClick', и клик запускается: http://jsfiddle.net/nghkbzwx/5/ –

+0

Или вы можете просто добавить '.click() 'в ваш оператор: ' $ (this) .next ('input [type = "submit"]'). css ("background", "red"). click (function() {alert ("test"); }). click(); 'Но в этом случае привязка выполняется при каждом изменении ввода. –