2015-02-14 2 views
1

У меня есть класс .addy, применяемый к нескольким входам. Я не хочу писать кучу функций с одним и тем же кодом, поэтому хотел бы иметь инструкции if, внутри которых указывается функция, какие части выполнять. Это зависит от того, откуда происходит действие: input # address1 или input # address2.JQuery Action Origination

Нужна помощь с моим заявлением, пожалуйста. Как я могу сказать, была ли функция # address1 или # address2 отправлена?

$("input.addy").on('change', function(e) { 
    e.preventDefault(); 
    var uid = $('form#data input[name=user_id]').val(); 
    var bid = $('form#data input[name=business_id]').val(); 
    if() { //if the change was made to input#address1, do the below 
     var address1 = this.value; 
     var data = {user_id: uid, business_id: bid, address1: address1}; 
     $.ajax({ 
      url:'/business/assignment/saveaddressone', 
      type: 'POST', 
      dataType:'JSON', 
      data:data, 
      success: update 
     }) 
    } 
    if() { //if the change was made to input#address2, do the below 
     //here is address2 code 
    } 
}); 
+0

http://stackoverflow.com/questions/14897768/jquery-get-id-of-input-field и вместо этого используйте $ (this). –

+0

Не слишком уверен в том, что именно вы пытаетесь сделать – Haring10

+0

@HugoSousa, это не помогает спасибо, хотя – webwrks

ответ

0

Проверьте идентификатор измененного input.addy?

if($(this).attr('id') == "address1") { 
    // it is input#address1 
    ... 
} else if ($(this).attr('id') == "address2") { 
    // it is input#address2 
    ... 
} 
+2

Заверните это в jquery? вы можете сделать this.id или e.target.id –

+0

@GeorgeMauer Я поклонник jQuery :) – Haring10

+0

Даже тогда поддержка более подходит, чем attr здесь –

1

Вы хотите проверить id изменившейся input, который вы можете получить доступ с $(this).attr(id).

$("input.addy").on('change', function(e) { 
    e.preventDefault(); 
    var uid = $('form#data input[name=user_id]').val(); 
    var bid = $('form#data input[name=business_id]').val(); 
    if ($(this).attr('id') == "address1") { //if the change was made to input#address1, do the below 
     var address1 = this.value; 
     var data = {user_id: uid, business_id: bid, address1: address1}; 
     $.ajax({ 
      url:'/business/assignment/saveaddressone', 
      type: 'POST', 
      dataType:'JSON', 
      data:data, 
      success: update 
     }) 
    } 
    if ($(this).attr('id') == "address2") { //if the change was made to input#address2, do the below 
     //here is address2 code 
    } 
}); 
1
e.target.id === 'address1' 

или

$(e.target).is('#address1') 

Но, а не использовать, если это именно то, где вы будете использовать функцию, которая возвращает другую функцию.

function doStuff(wrappedFunctionality) { return function doStuff(e) { 
    var $el = $(e.target); 
    //do common stuff here 
    wrappedFunctionality($el); 
    //do more common stuff 
} } 

$('#address1').on('change', doStuff(function($el) { 
    //do address1 specific things 
})) 

$('#address2').on('change', doStuff(function($el) { 
    //do address2 specific things 
})) 

Очевидно предоставляет функции, хорошие имена, которые отражают то, что они на самом деле делают, не doStuff и wrappedFunctionality.

Learn how to write composable functions, это абсолютное сердце, как писать идиоматические js.

+0

Отличный ответ тоже спасибо – webwrks

Смежные вопросы