我是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()。最后一个原则在完整列表中是正确的,但是在第一次搜索后使用列表时它不正常......
答案 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/