【问题标题】:jQuery When I select an Option to call a functionjQuery 当我选择一个选项来调用一个函数
【发布时间】:2015-04-10 14:32:45
【问题描述】:

当我从我的数据库中选择一个结果时,我想调用一个函数,用相应的信息填充字段“Linha”,如下图所示:

这是我的代码:

我的自动完成:

$("#produto").autocomplete({
    source: '/pedidoOnline/index.php/Pedidos/search',
    minLength: 2,
    focus: function(event, ui) {
        $("#produto").val(ui.item.label);
        return false;
    },
    select: function(event, ui) {
        $('#procura_produto').val(ui.item.id);
            }
    });

我要调用的函数来填充“Linha”字段:

function preencherLinhaProduto(obj) {
    $("#buscaLinha").autocomplete({
        source: '/pedidoOnline/index.php/Pedidos/pesquisarLinhaProduto/' + $('#procura_produto').val(),
        minLength: 2,
        select: function(event, ui) {
            $(obj).each(function() {
                $(this).closest('tr').find('input.cod_linha').val(ui.item.id);
                $(this).closest('tr').find('input.linha').val(ui.item.value);
            });
        }
    });
}

我的 HTML:

<div>
    <input type="button" value="Produtos" class="btn btn-success" onClick="dialogProcurarProdutos()">
    <div id="dialogProdutos" title="Procurar produtos cadastrados">
        <label for="produto">Informe o produto que deseja procurar</label>
        <input required type="hidden" name="procura_produto" id="procura_produto"/>
        <input required class="inputGG form-control" type="text" name="produto" id="produto" placeholder="Digite no mínimo as duas letras iniciais"/>"
    </div>

以及字段“Linha”的搜索

public function pesquisarLinhaProduto() {
    $this->autoRender = false;
    $this->loadModel('ProcuraProdutoPedOnline');
    // Consultando pelo que o usuário está digitando
    $produto = $this->request->params['pass'][0];
    $linhas = $this->ProcuraProdutoPedOnline->find('all', array(
            'fields' => array('cd_linha', 'ds_linha'),
            'conditions' => array(
                    'cd_cpl_tamanho' => "$produto",
            )
    ));

    // Formatar resultado
    $result = array();
    foreach ($linhas as $key => $linha) {
        $result[$key]['id'] = (int) $linha['ProcuraProdutoPedOnline']['cd_linha'];
        $result[$key]['label'] = utf8_encode($linha['ProcuraProdutoPedOnline']['ds_linha']);
    }

    $linhas = $result;

    echo json_encode($linhas);
}

但不幸的是,这不起作用。任何人都可以帮忙吗?

【问题讨论】:

  • 你也可以发布相关的 HTML 吗?
  • 你能不能登录你的选择函数的ui值。 console.log(ui)
  • 你在哪里打电话给function preencherLinhaProduto(obj)?它应该放在$("#produto").autocomplete({...})select: function(event, ui) 中吗?

标签: php jquery json jquery-ui-autocomplete


【解决方案1】:

你快到了! 您需要从自动完成的“选择”回调中调用回调函数(在这种情况下看起来是 preencherLinhaProduto)。 [这个场景的小 jsfiddle:http://jsfiddle.net/xngLuczn/ 在这里]

select: function (event, ui) {
        console.log(ui.item); //just to check
        preencherLinhaProduto(ui.item.value); //send the value here as parameter 
                                              //so the function can be generic
    }

如果您在这样做时遇到错误,请发布相关错误日志以获得更有用的答案。

另外,我建议您将选择回调和实际的自动完成药水分开(不使用匿名函数),以使其保持通用、干净和易于理解,并根据需要进行增强。

【讨论】:

  • 非常感谢!它工作了!...现在我有另一个问题...我在数据库中的查询工作正常,给我带来了我想要的结果,但在我的函数中,只是 []...在 Mozilla Firefox 中看到 Firebug “答案: []”。再次感谢。
  • 检查您的 JSFiddle 链接,目前是否已损坏。
  • @TimLewis 感谢您指出这一点。右括号挡住了。已更新。
  • @EdsonRodrigues 很高兴我能提供帮助。如果您的查询按预期工作,那么我会假设您如何将服务器端数据返回到客户端的技术存在问题,这会给您带来问题。也可以通过接受答案来表达您的感激之情。
  • @suvartheec,我在 DB 中的查询正在运行,但在 firefox 中进行代码调试时,出现了 Array [] empty rs.. 我正在使用 json_encode() 返回。
【解决方案2】:

在@suvartheec 的帮助下:

选择:函数(事件,用户界面){ 控制台.log(ui.item); //只是为了检查 preencherLinhaProduto(ui.item.value); //将值作为参数发送到这里 //所以函数可以是泛型的 }

成功了,非常感谢。

【讨论】:

    猜你喜欢
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    • 2012-07-18
    • 2018-11-09
    • 1970-01-01
    • 2015-01-01
    • 2012-02-27
    • 1970-01-01
    相关资源
    最近更新 更多