2013-10-14 3 views
1

У меня есть небольшая функция, я пытаюсь передать ей 2 параметра, но не работает ... Любая идея/sugestion?javascript function with jquery

У меня нет проблем с ajax, я протестировал этот код без параметров, поставил прямо на функцию, но позвонил ей, не работает, извините за ужасный английский !!

function myfunction(var_data, var_field) 
{ 
    $(function() 
    { 
    $.ajax 
    ({ 
     url : "myscriptajax.php", 
     type: "POST", 
     data: var_data + $(this).val(), 
     dataType:"json", 
     success: function(data) 
     { 
      if(data.status) 
      { 
      $(var_field).val(data.somevar); 
      } 
     } 
    }) 
}) 
} 
$("#medicocrm").change 
    (function() 
    { 
     myfunction("crm=","#mediconome"); 
    }) 

// отредактирован после здесь для лучшего объяснения о. Это работает:

$(function() 
{ 
    $("#medicocrm").change 
     (function() 
     { 
     $.ajax 
     ({ 
      url : "abertura.ajax.php", 
      type: "POST", 
      data: "crm=" + $(this).val(), 
      dataType:"json", 
      success: function(data) 
      { 
       if(data.status) 
       { 
        $("#mediconome").val(data.nome); 
       } 
      }  
     }) 
     return false; 
    }) 

$("#participantematricula").change 
    (function() 
    { 
     $.ajax 
     ({ 
      url : "abertura.ajax.php", 
      type: "POST", 
      data: "matricula=" + $(this).val(), 
      dataType:"json", 
      success: function(data) 
      { 
       if(data.status) 
       { 
        $("#participantenome").val(data.nome); 
       } 
      } 
     }) 
     return false; 
    }) 

\ я попытался это с первым ответом ...

и что не работает:

function verifica(dados,campoid,camponome){ 
    $.ajax({ 
     url : "abertura.ajax.php", 
     type: "POST", 
     data: dados + campoid, 
     dataType:"json", 
     success: function(data){ 
      if(data.status){ 
       $(camponome).val(data.nome); 
      } 
     } 
    }); 
    return false; 
}; 

$("#medicocrm").change(function(){ 
verifica("crm=",this.value,"#mediconome"); 
}); 

$("#participante_id").change(function(){ 
verifica("id=",this.value,"#participante_nome"); 
}); 
+2

Что вы ожидаете от 'этого'? Есть несколько способов правильно передать 'this'. Один из них - использовать '.call()' для вызова функции, где вы можете передать ссылку на это, или создав третий аргумент, который ссылается на правильное 'this'. – Jasper

+1

Удалить внутреннюю функцию '$ (function()' и исправить '$ (this) .val()', которая теперь не связана – Sergio

+1

, где находится полуколоны? – Dvir

ответ

4

Просто сделать обновляют.

function myfunction(var_data, var_field, elementValue){ 
    $.ajax({ 
     url : "myscriptajax.php", 
     type: "POST", 
     data: var_data + elementValue, 
     dataType:"json", 
     success: function(data){ 
      if(data.status){ 
      $(var_field).val(data.somevar); 
      } 
     } 
    }); 
}; 

$("#medicocrm").change(function() { 
     myfunction("crm=","#mediconome", this.value); 
}); 

Здесь мы удалили DOMContentLoaded слушателя и передается значение элемента через функции ..

Вы можете использовать $(this).val(); вместо this.value все, что плывет лодка.

+2

'this.value' - хорошая идея. +1 – Sergio

+0

не сработал тоже ... =/ –

+0

@MarceloAymone может объяснить, что не работает, поможет. – iConnor

0

У вас есть много оберток, и ваше использование $(this), вероятно, ломает его. Нечто подобное должно работать:

function myfunction(var_data,$var_field,whatever_this_is_val){ 
    $.ajax({ 
     url : "myscriptajax.php", 
     type: "POST", 
     data: var_data + whatever_this_is_val, 
     dataType:"json" 
    }).done(function(data){ 
     if(data.status){ 
      $var_field.value = data.somevar; 
     } 
    }); 
} 

$("#medicocrm").on('change',function(){ 
    myfunction("crm=",this,document.getElementById(whatever_this_is).value); 
}); 

Изменения:

  • Ненужные оберток удалены
  • Прохождение $(this) ... Вам нужно specifiy это
  • синтаксис Cleanup для современного использования .done().
  • Используя ванильный JS, где легко наносится

Вы должны также рассмотреть вопрос о явном объявлении страницы, она вызывает, чтобы быть в формате JSON, а не говорить dataType:'json' в вызове. Его пуленепробиваемый таким образом, и меньше работы выполняются со всех сторон.

EDIT

Если вы действительно просто передавая значение элемента изменилось, самый простой способ сделать это:

function myfunction(var_data,$var_field){ 
    $.ajax({ 
     url : "myscriptajax.php", 
     type: "POST", 
     data: var_data + $var_field.value, 
     dataType:"json" 
    }).done(function(data){ 
     if(data.status){ 
      $var_field.value = data.somevar; 
     } 
    }); 
} 

$("#medicocrm").on('change',function(){ 
    myfunction("crm=",this); 
}); 
+1

не являются необъяснимыми проголосовавшими за забаву? – PlantTheIdea

+1

Я не голосовал, но я бы предположил, что это из-за всего, что 'what_this_is' бессмыслица вместо контекста обработчика. – Mathletics

+0

хорошо делали предположение, что 'this' ссылается на изменение элемента ... если это не так, нужно указать ELSE. извините, если это было непонятно, потому что, если он действительно хочет получить одно и то же значение в функции, тогда есть гораздо более простой способ сделать это. – PlantTheIdea

0

этак работал !!!!!! Со многими обертками, но ... Работал!

callajax = (function(origem,dados,campo) 
{$.ajax({ 
    url : "abertura.ajax.php", 
    type: "POST", 
    data: origem + "=" + dados, 
    dataType:"json", 
    success: function(data){ 
     if(data.status){ 
      $(campo).val(data.nome); 
     } 
     else{ 
      $(campo).val(""); 
      alert('Não encontrado'); 
     } 
    } 
}) 
}); 

$(function(){$("#medicocrm").change 
    (function(){ 
     callajax('crm',this.value,"#mediconome"); 
    }); 
}); 

$(function(){$("#participantematricula").change 
(function(){ 
     callajax('matricula',this.value,"#participantenome"); 
    }); 
}); 

$(function(){$("#prestadorcodsoc").change 
    (function(){ 
     callajax('codsoc',this.value,"#prestadornome") 
    }); 
}); 
+0

Я предполагаю, что структура jQuery нуждается в том, чтобы обертки запускались ... с моей функцией и параметрами, у меня есть более чистый код, который легко адаптируется к другим полям формы. –