如何有不同的链接

时间:2014-01-05 06:39:05

标签: jquery jquery-select2

我是JS的新手> jQuery> select2和...英语! 我的问题:我希望http://jsfiddle.net/JfWtJ/1/中的链接是动态的。

所以,我第一次测试:

function format(state) {
    return state.text + "<a class='info' target='_blank' href='http://obs43/test.php?param="+state.id+"'  >link</a>";
}

(见http://jsfiddle.net/7J8Ag/)但不行。

第二次,我用{

}测试http://jsfiddle.net/7J8Ag/1/
$("#select").on('open', function() { 
    $('.select2-results i').on('mouseup', function() { 
        $('#select').on('change', function() { 
            window.open("http://obs43/test.php?param=" + $("#select").val());
        });
    }); 
});

第一次选择没问题,但是在第二次选择时,有两个“window.open”,在第三次选择时,有三个“window.open”等。

为什么呢?我该如何正确地做到这一点?

  

我指定我希望“window.open ...”以 ONLY 开头,点击“链接”,而不是“$('#select')。on('change' ......“

我使用第二次写,因为

$("#select").on('open', function() { 
$('.select2-results i').on('mouseup', function() { 
     window.open("http://obs43/test.php?param=" + $("#select").val()); 
}); "

看起来没问题,但是如果你看到的话,你会注意到$(“#select”)。val()是优先项目,而不是列表中选择的$(“#select”)。val()。最后一个原则在完整列表中是正确的,但是在第一次搜索后使用列表时它不正常......

2 个答案:

答案 0 :(得分:2)

使用此js它将解决您的问题

 function format(state) {
// if (!state.id) return state.text; // optgroup
return state.text + "<i class='info' id='"+state.id+"'>link</i>"+state.id;
//return state.text + "<a class='info' target='_blank' href='http://obs43/test.php?param="+state.id+"  >link</a>";
}

$("#select").select2({
formatResult: format,
escapeMarkup: function(m) { return m; }
});

   $("#select").on('open', function() { 
$('.select2-results i').on('mouseup', function(event) { 
  //  alert(event.target.id);
     window.open("http://obs43/test.php?param=" +event.target.id);
}); 
});

添加此功能

$("#select").on('open', function() { 
$('.select2-results i').on('mouseup', function(event) { 
  //  alert(event.target.id);
     window.open("http://obs43/test.php?param=" +event.target.id);
}); 
});

答案 1 :(得分:1)

您不应该在其他事件回调中绑定事件。 例如,在你的代码中,在'.select2-results i'上的每个“mouseup”上,一个新的'change'事件处理程序被附加到'#select',因为你在mouseup事件的回调中附加了事件。简单来说,你的代码正在做什么 - “当我在这个链接上鼠标时,将一个事件附加到#select”。因此附加了多个事件。因此打开了多个窗口。

您需要的只是一个单独的事件,看起来像这样

$('#select').on('change', function() { 
    window.open("http://obs43/test.php?param=" + $("#select").val(), "linkWindow");
});

如果要打开同一个新标签/窗口中的所有链接,请在window.open中传递第二个可选的“name”参数。为窗口设置名称可确保新链接在名称为“linkWindow”的窗口中打开,而不是打开另一个窗口。如果不存在具有该名称的窗口,则会打开一个新窗口(具有该名称)。

这是完整的小提琴。 http://jsfiddle.net/7J8Ag/3/