#javascript #jquery
#javascript #jquery
Вопрос:
Это мой код, я хочу передать параметры во всплывающую функцию, но она не работает, я удаляю параметры, которые работают. является ли этот код истинным?
$(document).ready(function() {
var now = new Date();
$.ajax({
type: "GET",
url: 'http://sarafandnet.com/sites.xml',
dataType: "xml",
success: function(xml) {
$(xml).find('New').each(function() {
var id = $(this).attr('id');
var title = $(this).find('title').text();
var date = $(this).find('date').text();
var url = $(this).find('url').text();
var desc = $(this).find('desc').text();
if (now.getDate() == date) {
document.getElementById("td" date).innerHTML = '<table width="16" border="0" cellspacing="0" cellpadding="0"><tr><td height="21" ><a href="javascript:void(0);" onclick="showFlyout('' title '','' desc '')" class="lightwindow" height="10px" title="' title '" caption="' desc '" >click</a></td></tr></table>';
}
});
}
});
});
function Init() {
System.Gadget.Flyout.file = "flyout.html";
// Initialize the Flyout state display.
if (!System.Gadget.Flyout.show) {
sFlyoutFeedback.innerText = "Flyout hidden.";
}
}
function showFlyout(titlee, descc) {
System.Gadget.Settings.write("title", titlee);
System.Gadget.Settings.write("desc", descc);
System.Gadget.Flyout.file = "flyout.html";
System.Gadget.Flyout.show = true;
}
function showFlyout() {
System.Gadget.Flyout.show = true;
}
function hideFlyout() {
oGadgetDocument.getElementById("strFlyoutFeedback").innerText = "Flyout hidden.";
System.Gadget.Flyout.show = false;
}
Ответ №1:
-
Вы не можете объявлять функцию с одним и тем же именем более одного раза; даже если функции принимают разные параметры.
Ваше второе объявление
showFlyout
(не принимающее параметров) переопределяет первое.Если вы хотите такого поведения (необязательные параметры), вы должны сделать что-то вроде этого:
function showFlyout(titlee, descc) { if (arguments.length == 0) { System.Gadget.Flyout.show = true; } else { System.Gadget.Settings.write("title", titlee); System.Gadget.Settings.write("desc", descc); System.Gadget.Flyout.file = "flyout.html"; System.Gadget.Flyout.show = true; } }
-
Каждый раз, когда вы вызываете
$(this)
, вы воссоздаете точно такой же объект jQuery … кэшируете его:$(xml).find('New').each(function() { var self = $(this); // cache this var id = self.attr('id'); // now use self instead of this var title = self.find('title').text(); var date = self.find('date').text(); var url = self.find('url').text(); var desc = self.find('desc').text(); if (now.getDate() == date) { document.getElementById("td" date).innerHTML = '<table width="16" border="0" cellspacing="0" cellpadding="0"><tr><td height="21" ><a href="javascript:void(0);" onclick="showFlyout('' title '','' desc '')" class="lightwindow" height="10px" title="' title '" caption="' desc '" >click</a></td></tr></table>'; } });
-
Галерея Windows удалена с прошлой недели, поэтому вы никогда не сможете опубликовать свой гаджет в официальной галерее.
Комментарии:
1. @KassemShehady: Где в предоставленном вами коде вы пытаетесь открыть всплывающее окно с параметрами? Вы не можете передавать параметры при открытии всплывающего окна, вы должны открыть всплывающее окно (
System.Gadget.Flyout.show = true
), а затем установить значение в глобальной области видимости в (System.Gadget.Flyout.document.parentWindow.someVar = 4
) из Гаджета, а затем прочитать его во всплывающем окне (window.someVar
)2. onclick=»showFlyout(» title »,» desc »)» здесь я передаю параметры функции showFlyout, которая сохранит их в system.gadget.settings.write. а затем во всплывающем окне я прочитаю эти переменные, используя system.gadget.settings.read(..)
3. @KassemShehady: Вы читали мой ответ, вы не можете объявлять функцию с одним и тем же именем более одного раза; даже если функции принимают разные параметры. Ваше второе объявление showFlyout (не принимающее параметров) переопределяет первое .. В вашем всплывающем файле используйте
System.Gadget.Settings.read
(после исправления вашего повторного объявленияshowFlyout
), и это сработает.