Альтернатива ClearOriginalTarget.id для Chrome и IE 8 - PullRequest
5 голосов
/ 09 ноября 2011

Я пытаюсь найти кросс-браузерный способ выбора атрибута id кнопки, которая нажимается во время отправки формы, имеющей две разные кнопки отправки. Я смог сделать это для FireFox с помощью следующего, но он не будет работать в IE 8 или Chrome, потому что они не поддерживают явныйOriginalTarget.

   $("#postForm, #dialogPostForm, #pastPostForm").live('submit', function(event) {
     event.preventDefault();
     if (event.originalEvent.explicitOriginalTarget.id === 'pastPosts'){
     ...SNIP...

Может кто-нибудь предложить кросс-браузерный совместимый способ сделать это?

ОБНОВЛЕНИЕ Я пытался использовать ответ от Как получить кнопку, вызвавшую отправку из события отправки формы? , но я бы хотел использовать метод .live jquery и использовать Объект события, чтобы выбрать исходный идентификатор отправки ввода.

ОБНОВЛЕНИЕ Вот моя форма, из которой я пытаюсь получить исходный идентификатор кнопки отправки:

<form id="postForm" action="{% url account_tracker mashup.pk %}?fuzzy=true" method="post">
    <div class="mygoal">Update Your Progress: {{ form.post }}
    <input type="submit" value="+  1" class="formbtn" style="font-size:18px;"/>
    <input type="submit" value="This week" style="font-size:18px;" id="pastPosts" class="formbtn"/>         
    <span id="result" class="results"></span>
    </div>
</form>

ОБНОВЛЕНИЕ Я придумал собственное решение. Добавьте атрибут onclick, который добавляет атрибут «name» в форму. Затем в обработке формы проверьте, является ли имя формы «прошлым», и сделайте что-нибудь с ним, затем удалите атрибут после того, как форма завершит обработку. Насколько я могу судить, это работает во всех браузерах.

 <input type="submit" value="This week" style="font-size:18px;" id="pastPosts" class="formbtn" onclick="$('#postForm').attr('name', 'past');" />

Ответы [ 2 ]

4 голосов
/ 29 апреля 2015

Альтернативы нет.

Это свойство только для Firefox.

Это действительно старый вопрос, и на него нужно ответить.

Я гуглил по этому поводу и нашел решение на http://www.webmuse.co.uk/blog/using-forms-with-multiple-submit-buttons-and-jquery-events/

По сути, попробуйте получить сфокусированный элемент.

Пример:

(function($){
  $(document).ready(function(){
    
    $('#user_form').submit(function(event){
     
      event.preventDefault(); //stops submission
      
      $('#name_submit')
        .text(
          //searches all the submit buttons
          $('input[type="submit"], button[type="submit"]',this)
            .filter(':focus') //finds the focused one
            .attr('name') //takes the name
        );
      
    });
    
  });
})(jQuery);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>

<form action="#" id="user_form">
  <input type="email" placeholder="Email"/><br>
  <input type="password" placeholder="Password"/><br>
  
  <input type="submit" name="login" value="Login"/>
  <input type="submit" name="register" value="Register"/>
</form>
<br>
Clicked submit name: <span id="name_submit">(none)</span>

Я протестировал это, и оно работает в IE7 и Firefox (по крайней мере, в текущей версии).

0 голосов
/ 09 ноября 2011

Дано:

<div id="parent">
    <div id="child">
        clicky
    </div>
</div>

Мы можем применить следующую логику: (ОБНОВЛЕНО)

$('#parent').live('click', function(e){
    var target = e.originalEvent || e.originalTarget;
    console.log($(target.srcElement || target.originalTarget).attr('id'));
});

Это дает мне 'child' в Chrome, IE9 и FF8, если я нажимаю на child.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...